Tarea III

AdvNNs

7 de noviembre de 2025

Resumen

El objetivo de esta tarea es iniciar el proyecto final. Por favor, suba sus soluciones en un archivo comprimido a Classroom antes del 18 de noviembre.

Problema 1

Describa en los siguientes puntos clave de su proyecto:

a) Un breve resumen del proyecto. No olvide declarar claramente el objetivo de su proyecto.

En un proyecto para una aplicación que le enseñe a los niños identificar diferentes deportes a través de imágenes, se busca desarrollar modelo que dada la enorme cantidad de imágenes que se requieren para, en primer lugar, la aplicación sea entretenida y, en segundo lugar, pueda identificar si un usuario suba una imagen de un deporte específico, el modelo debe ser capaz de clasificar imágenes en diferentes categorías deportivas (fútbol, baloncesto, tenis, natación, etc.) con alta precisión y eficiencia.

b) Descripción del conjunto de datos. Describa la forma, el tamaño y el preprocesamiento existente de sus datos, incluyendo el proceso de recolección de datos, etc. Añada el enlace URL de los datos.

El conjunto de datos Sports Image Dataset contiene imágenes clasificadas en 22 categorías deportivas, cada una representada por una carpeta con el nombre del deporte correspondiente. Cada carpeta incluye entre 400 y 900 imágenes, con un total aproximado de 14,300 imágenes. Estas imágenes fueron recolectadas utilizando un scraper de Google Images, lo que asegura una amplia variedad de ejemplos para cada categoría.

El conjunto de datos está organizado de la siguiente manera:

  • Número de categorías: 22 (por ejemplo, fútbol, baloncesto, natación, etc.)
  • Número de imágenes por categoría: Entre 400 y 900
  • Tamaño total: 494.03 MB
  • Formato de las imágenes: No especificado, pero típicamente en formatos comunes como JPG o PNG
  • Licencia: CC BY-NC-SA 4.0

El preprocesamiento inicial incluye la clasificación de las imágenes en carpetas según su categoría. Sin embargo, no se menciona ningún otro tipo de preprocesamiento, como el cambio de tamaño, normalización o eliminación de imágenes duplicadas.

Enlace al conjunto de datos: Sports Image Dataset en Kaggle

c) Arquitectura de su modelo. Describa todos los hiperparámetros pertenecientes a su modelo, como el número de capas, neuronas, tipo de red neuronal, etc. Aunque la arquitectura final pueda variar, explique su elección inicial y calcule el número de parámetros entrenables.

Elegire como arquitectura inicial una red neuronal convolucional (CNN) debido a su eficacia comprobada en tareas de clasificación de imágenes. La arquitectura propuesta es la siguiente:

Sera una arquitectura AlexNet, lo considero adecuado debido a su capacidad para aprender características jerárquicas y su eficacia en la clasificación de imágenes.

image.png image-3.png image-2.png

d) Describa otras consideraciones, incluyendo optimizador, función de coste, etc. Describa por qué los eligió entre otras posibilidades.

Se elegio un optimizador Adam por su capacidad para adaptarse a diferentes tasas de aprendizaje, y una funcion de coste de entropía cruzada categórica, adecuada para problemas de clasificación multiclase, además se programa un scheduler que reduce el learning rate de manera progresiva para mejorar la convergencia y un early stopping para evitar el sobreajuste.

In [ ]:
 

Problema 2

Realice un análisis exploratorio de datos. Anote todas sus conclusiones.

In [46]:
import os
import kagglehub
import glob

path = kagglehub.dataset_download("rishikeshkonapure/sports-image-dataset")

# Cambia 'images' por 'data' para buscar en todas las carpetas de deportes
imagenes_dir = os.path.join(path, "data")

# Buscar todas las imágenes jpg en todos los subdirectorios
imagenes = glob.glob(os.path.join(imagenes_dir, "**", "*.jpg"), recursive=True)

print(f"Total de imágenes encontradas: {len(imagenes)}")
Total de imágenes encontradas: 12991
In [2]:
import matplotlib.pyplot as plt
import matplotlib.image as mpimg
import numpy as np
import os
import random

imagenes_por_carpeta = {}
for img_path in imagenes:
    carpeta = os.path.basename(os.path.dirname(img_path))
    imagenes_por_carpeta.setdefault(carpeta, []).append(img_path)


imagenes_seleccionadas = []
carpetas = list(imagenes_por_carpeta.keys())
for carpeta in carpetas:
    imgs = imagenes_por_carpeta[carpeta]
    seleccionadas = random.sample(imgs, min(2, len(imgs)))
    for img in seleccionadas:
        imagenes_seleccionadas.append((img, carpeta))

# Muestra las imágenes
plt.figure(figsize=(10, 2 * len(imagenes_seleccionadas) // 2))
for i, (img_path, carpeta) in enumerate(imagenes_seleccionadas):
    img = mpimg.imread(img_path)
    plt.subplot(len(imagenes_seleccionadas) // 2, 2, i + 1)
    plt.imshow(img)
    plt.axis('off')
    plt.title(carpeta, fontsize=10)
plt.tight_layout()
plt.show()
No description has been provided for this image

La anterior salida de codigo muestra un par de imagenes por categoria deportiva, permitiendo observar la variedad y características visuales de las imágenes en cada categoría.

In [ ]:
 
In [3]:
def brillo_medio_color(img_path: str) -> float:
    """
    Calcula el brillo promedio de una imagen RGB.
    El brillo se define como el promedio de los valores de los canales R, G y B.

    Parámetros:
    img_path (str): Ruta de la imagen.

    Retorna:
    float: Brillo promedio.
    """
    try:
        img = mpimg.imread(img_path)
        if img.ndim == 3 and img.shape[2] >= 3:
            # Si la imagen está en formato uint8, normaliza a [0,255]
            if img.dtype == np.uint8:
                brillo = np.mean(img[..., :3])
            else:
                brillo = np.mean(img[..., :3] * 255)
            return brillo
        else:
            # Imagen en escala de grises
            return np.mean(img)
    except Exception as e:
        print(f"Error al procesar {img_path}: {e}")
        return np.nan
In [4]:
# Visualiza la distribución de brillo por carpeta y en general
import matplotlib.pyplot as plt

# Calcula brillos por carpeta
brillos_por_carpeta = {}
for carpeta, rutas in imagenes_por_carpeta.items():
    brillos = [brillo_medio_color(p) for p in rutas if os.path.exists(p)]
    brillos = [b for b in brillos if not np.isnan(b)]
    if brillos:
        brillos_por_carpeta[carpeta] = brillos

# Histograma general
todos_los_brillos = [b for brillos in brillos_por_carpeta.values() for b in brillos]
plt.figure(figsize=(8,4))
plt.hist(todos_los_brillos, bins=30, color='gray', alpha=0.7)
plt.title('Distribución general de brillo')
plt.xlabel('Brillo promedio (RGB)')
plt.ylabel('Frecuencia')
plt.show()

# Histogramas por carpeta (máx 6 carpetas para visualización)
plt.figure(figsize=(12,8))
for i, (carpeta, brillos) in enumerate(list(brillos_por_carpeta.items())[:6]):
    plt.subplot(2,3,i+1)
    plt.hist(brillos, bins=30, alpha=0.7)
    plt.title(f'{carpeta}')
    plt.xlabel('Brillo promedio')
    plt.ylabel('Frecuencia')
plt.tight_layout()
plt.show()
No description has been provided for this image
No description has been provided for this image
In [5]:
import random
import matplotlib.pyplot as plt
import matplotlib.image as mpimg
import numpy as np
import os

# Selecciona hasta 10 imágenes por cada carpeta (todas las carpetas incluidas)
pixeles_por_carpeta = {}
for carpeta, rutas in imagenes_por_carpeta.items():
    seleccionadas = random.sample(rutas, min(10, len(rutas)))
    pixeles = []
    for img_path in seleccionadas:
        if os.path.exists(img_path):
            try:
                img = mpimg.imread(img_path)
                if img.ndim == 3 and img.shape[2] >= 3:
                    arr = img[..., :3].reshape(-1)
                    if img.dtype != np.uint8:
                        arr = (arr * 255)
                    arr = arr.astype(np.uint8)
                else:
                    arr = img.reshape(-1)
                    arr = arr.astype(np.uint8)
                pixeles.extend(arr.tolist())
            except Exception as e:
                pass
    if pixeles:
        pixeles_por_carpeta[carpeta] = pixeles

# Histograma global
todos_pixeles = [p for pixs in pixeles_por_carpeta.values() for p in pixs]
plt.figure(figsize=(8,4))
plt.hist(todos_pixeles, bins=50, color='purple', alpha=0.7)
plt.title('Distribución global de valores de píxeles (muestra de 10 imágenes por carpeta)')
plt.xlabel('Valor de píxel (0-255)')
plt.ylabel('Frecuencia')
plt.show()

# Visualización: 4 histogramas por figura para mejor claridad
carpetas_a_mostrar = list(pixeles_por_carpeta.items())
num_por_figura = 4
num_figuras = (len(carpetas_a_mostrar) + num_por_figura - 1) // num_por_figura

for fig_idx in range(num_figuras):
    plt.figure(figsize=(14, 8))
    for i in range(num_por_figura):
        idx = fig_idx * num_por_figura + i
        if idx >= len(carpetas_a_mostrar):
            break
        carpeta, pixs = carpetas_a_mostrar[idx]
        plt.subplot(2, 2, i + 1)
        plt.hist(pixs, bins=50, alpha=0.7)
        plt.title(f'{carpeta}')
        plt.xlabel('Valor de píxel')
        plt.ylabel('Frecuencia')
    plt.tight_layout()
    plt.show()
No description has been provided for this image
No description has been provided for this image
No description has been provided for this image
No description has been provided for this image
No description has been provided for this image
No description has been provided for this image
No description has been provided for this image
In [6]:
import matplotlib.pyplot as plt
import matplotlib.image as mpimg
import os
from collections import Counter

anchos = []
altos = []

for img_path in imagenes:
    if os.path.exists(img_path):
        try:
            img = mpimg.imread(img_path)
            altos.append(img.shape[0])
            anchos.append(img.shape[1])
        except Exception as e:
            pass

plt.figure(figsize=(8,4))
plt.hist(anchos, bins=30, alpha=0.7, label='Ancho')
plt.hist(altos, bins=30, alpha=0.7, label='Alto')
plt.title('Distribución de tamaños de imágenes')
plt.xlabel('Pixeles')
plt.ylabel('Frecuencia')
plt.legend()
plt.show()

# Corrige el cálculo del tamaño más común
tamanos = list(zip(anchos, altos))
contador = Counter(tamanos)
mas_comun = contador.most_common(1)[0][0] if contador else (None, None)
print(f'Tamaño más común: {mas_comun}')
print(f'Tamaños únicos: {len(contador)}')
No description has been provided for this image
Tamaño más común: (500, 281)
Tamaños únicos: 1648

La mayoría de imagenes son de (500 x 281) pixeles, hacer un resize de todas las imagenes a (224 x 224) pixeles sera adecuado para el modelo.

In [7]:
'''
from PIL import Image
import glob
import os

# Carpeta de entrada y salida
input_dir = imagenes_dir
output_dir = "data_224"

os.makedirs(output_dir, exist_ok=True)

# Busca todas las imágenes jpg y png
imagenes = glob.glob(os.path.join(input_dir, "**", "*.jpg"), recursive=True) + \
           glob.glob(os.path.join(input_dir, "**", "*.png"), recursive=True)

for img_path in imagenes:
    with Image.open(img_path) as img:
        img_resized = img.resize((224, 224), Image.LANCZOS)
        # Crea la misma estructura de carpetas en la salida
        rel_path = os.path.relpath(img_path, input_dir)
        out_path = os.path.join(output_dir, rel_path)
        os.makedirs(os.path.dirname(out_path), exist_ok=True)
        img_resized.save(out_path)
'''
Out[7]:
'\nfrom PIL import Image\nimport glob\nimport os\n\n# Carpeta de entrada y salida\ninput_dir = imagenes_dir\noutput_dir = "data_224"\n\nos.makedirs(output_dir, exist_ok=True)\n\n# Busca todas las imágenes jpg y png\nimagenes = glob.glob(os.path.join(input_dir, "**", "*.jpg"), recursive=True) +            glob.glob(os.path.join(input_dir, "**", "*.png"), recursive=True)\n\nfor img_path in imagenes:\n    with Image.open(img_path) as img:\n        img_resized = img.resize((224, 224), Image.LANCZOS)\n        # Crea la misma estructura de carpetas en la salida\n        rel_path = os.path.relpath(img_path, input_dir)\n        out_path = os.path.join(output_dir, rel_path)\n        os.makedirs(os.path.dirname(out_path), exist_ok=True)\n        img_resized.save(out_path)\n'

Problema 3

Realice una implementación inicial "ingenua" de su proyecto usando PyTorch. Calcule al menos lo siguiente:

a) Gráfica de error a lo largo de las iteraciones.

b) Precisiones finales de entrenamiento/prueba.

c) Tiempo de su simulación (entrenamiento).

d) Muestre un dato donde su modelo entrenado exhiba un desempeño excelente.

e) Muestre un dato donde su modelo entrenado exhiba un desempeño pobre.

f) Identifique el mayor problema/desafío con su modelo actual.

g) Proponga un plan para abordar lo anterior.

In [2]:
import torch
import torch.nn as nn
import torch.optim as optim
from torch.utils.data import DataLoader, Subset
from torchvision import datasets, transforms, models
from sklearn.model_selection import train_test_split
import matplotlib.pyplot as plt
import numpy as np
import time
import os
from collections import Counter

# Configuración de dispositivo
device = torch.device('cuda' if torch.cuda.is_available() else 'cpu')
print(f'Usando dispositivo: {device}')

# Hiperparámetros
BATCH_SIZE = 32
NUM_EPOCHS = 20
LEARNING_RATE = 1e-4
TRAIN_SPLIT = 0.8

# Transformaciones para las imágenes (con resize incluido)
transform = transforms.Compose([
    transforms.Resize((224, 224)),  # Resize mediante PyTorch
    transforms.ToTensor(),
    transforms.Normalize(mean=[0.485, 0.456, 0.406], std=[0.229, 0.224, 0.225])
])

# Carga del dataset desde el directorio de Kaggle (imagenes_dir ya definido antes)
print(f'Cargando dataset desde: {imagenes_dir}')

dataset = datasets.ImageFolder(root=imagenes_dir, transform=transform)
print(f'Total de imágenes: {len(dataset)}')
print(f'Clases: {dataset.classes}')
print(f'Número de clases: {len(dataset.classes)}')

# División estratificada en entrenamiento y prueba (balance perfecto por clase)
targets = [label for _, label in dataset.samples]
indices = list(range(len(dataset)))

train_indices, test_indices = train_test_split(
    indices, 
    test_size=1-TRAIN_SPLIT, 
    stratify=targets, 
    random_state=42
)

# Crear subsets balanceados
train_dataset = Subset(dataset, train_indices)
test_dataset = Subset(dataset, test_indices)

train_loader = DataLoader(train_dataset, batch_size=BATCH_SIZE, shuffle=True, num_workers=0)
test_loader = DataLoader(test_dataset, batch_size=BATCH_SIZE, shuffle=False, num_workers=0)

print(f'\nTamaño del conjunto de entrenamiento: {len(train_indices)}')
print(f'Tamaño del conjunto de prueba: {len(test_indices)}')
Usando dispositivo: cuda
Cargando dataset desde: C:\Users\sergi\.cache\kagglehub\datasets\rishikeshkonapure\sports-image-dataset\versions\1\data
Total de imágenes: 14149
Clases: ['badminton', 'baseball', 'basketball', 'boxing', 'chess', 'cricket', 'fencing', 'football', 'formula1', 'gymnastics', 'hockey', 'ice_hockey', 'kabaddi', 'motogp', 'shooting', 'swimming', 'table_tennis', 'tennis', 'volleyball', 'weight_lifting', 'wrestling', 'wwe']
Número de clases: 22

Tamaño del conjunto de entrenamiento: 11319
Tamaño del conjunto de prueba: 2830
In [3]:
# --- Data Augmentation: aplicar solo al conjunto de entrenamiento ---
import random
torch.manual_seed(42)
np.random.seed(42)
random.seed(42)

train_transform = transforms.Compose([
    transforms.Resize((224, 224)),  # Resize mediante PyTorch
    transforms.RandomResizedCrop(224, scale=(0.5, 1.0)),  # zoom_range=0.5 equivalente
    transforms.RandomHorizontalFlip(p=0.5),
    transforms.RandomVerticalFlip(p=0.5),  # vertical_flip añadido
    transforms.RandomRotation(degrees=40),  # rotation_range=40
    transforms.RandomAffine(degrees=0, translate=(0.3, 0.2)),  # width/height shift
    transforms.ColorJitter(brightness=(0.2, 1.0), contrast=0.2, saturation=0.2, hue=0.05),  # brightness_range ajustado
    transforms.ToTensor(),
    transforms.Normalize(mean=[0.485, 0.456, 0.406], std=[0.229, 0.224, 0.225])
])

# Para validación / test: determinista (solo resize y normalización)
test_transform = transforms.Compose([
    transforms.Resize((224, 224)),  # Resize mediante PyTorch
    transforms.ToTensor(),
    transforms.Normalize(mean=[0.485, 0.456, 0.406], std=[0.229, 0.224, 0.225])
])

# Reconstruir datasets con las nuevas transformaciones desde el directorio de Kaggle
train_folder = datasets.ImageFolder(root=imagenes_dir, transform=train_transform)
test_folder = datasets.ImageFolder(root=imagenes_dir, transform=test_transform)

# Usar los mismos índices estratificados que calculamos anteriormente
train_dataset = Subset(train_folder, train_indices)
test_dataset = Subset(test_folder, test_indices)

# Actualizar DataLoaders
train_loader = DataLoader(train_dataset, batch_size=BATCH_SIZE, shuffle=True, num_workers=0)
test_loader = DataLoader(test_dataset, batch_size=BATCH_SIZE, shuffle=False, num_workers=0)

print('\n>> Data augmentation aplicado: train_transform definido con Resize, RandomResizedCrop, RandomHorizontalFlip y ColorJitter')

print(f"Train samples: {len(train_dataset)}, Test samples: {len(test_dataset)}")
print(f"Dataset cargado desde: {imagenes_dir}")
>> Data augmentation aplicado: train_transform definido con Resize, RandomResizedCrop, RandomHorizontalFlip y ColorJitter
Train samples: 11319, Test samples: 2830
Dataset cargado desde: C:\Users\sergi\.cache\kagglehub\datasets\rishikeshkonapure\sports-image-dataset\versions\1\data
In [4]:
# === Estadísticas desde DataLoaders (incluye augmentations en train) ===
print('\n=== Estadísticas usando DataLoaders (muestras con transforms aplicadas) ===')

def compute_loader_stats(loader, n_batches=50):
    """Calcula media y std por canal a partir de batches del loader.
    Se des-normaliza cada batch antes de calcular estadísticas para obtener valores en [0,1].
    """
    means_r, means_g, means_b = [], [], []
    stds_r, stds_g, stds_b = [], [], []
    mean = np.array([0.485, 0.456, 0.406])
    std = np.array([0.229, 0.224, 0.225])
    batches = 0

    for images, _ in loader:
        imgs = images.cpu().numpy()  # (B, C, H, W)
        imgs = np.transpose(imgs, (0, 2, 3, 1))  # (B, H, W, C)
        # Des-normalizar: x = x * std + mean
        imgs = imgs * std + mean
        imgs = np.clip(imgs, 0.0, 1.0)

        # calular por imagen
        for im in imgs:
            means_r.append(im[:, :, 0].mean())
            means_g.append(im[:, :, 1].mean())
            means_b.append(im[:, :, 2].mean())
            stds_r.append(im[:, :, 0].std())
            stds_g.append(im[:, :, 1].std())
            stds_b.append(im[:, :, 2].std())

        batches += 1
        if batches >= n_batches:
            break

    return {
        'mean_r': np.mean(means_r), 'mean_g': np.mean(means_g), 'mean_b': np.mean(means_b),
        'std_r': np.mean(stds_r), 'std_g': np.mean(stds_g), 'std_b': np.mean(stds_b)
    }

# Calcular estadísticas a partir de los loaders (train con augmentations, test sin augmentations)
train_loader_stats = compute_loader_stats(train_loader, n_batches=50)
test_loader_stats = compute_loader_stats(test_loader, n_batches=50)

# Mostrar tabla comparativa
print(f"{'Estadística':<20} {'Train':<12} {'Test':<12} {'Drift Absoluto':<15} {'Drift %':<10}")
print('-' * 80)
for stat in ['mean_r', 'mean_g', 'mean_b', 'std_r', 'std_g', 'std_b']:
    t = train_loader_stats[stat]
    s = test_loader_stats[stat]
    drift_abs = abs(t - s)
    drift_pct = 100 * drift_abs / (t + 1e-10)
    print(f"{stat:<20} {t:<12.6f} {s:<12.6f} {drift_abs:<15.6f} {drift_pct:<10.4f}")

all_drifts = [abs(train_loader_stats[s] - test_loader_stats[s]) / (train_loader_stats[s] + 1e-10) * 100 
              for s in train_loader_stats.keys()]
print(f"\nDrift promedio (loader): {np.mean(all_drifts):.4f}%")
print(f"Drift máximo (loader): {np.max(all_drifts):.4f}%")

# Mostrar algunas imágenes aumentadas (des-normalizadas) para inspección
print('\nMostrando 12 imágenes aumentadas de ejemplo (train)')
mean = np.array([0.485, 0.456, 0.406])
std = np.array([0.229, 0.224, 0.225])

batch = next(iter(train_loader))
imgs, labels = batch
imgs = imgs[:12]  # tomar hasta 12
imgs = imgs.cpu().numpy()
imgs = np.transpose(imgs, (0, 2, 3, 1))
imgs = imgs * std + mean
imgs = np.clip(imgs, 0, 1)

fig, axes = plt.subplots(3, 4, figsize=(12, 9))
axes = axes.flatten()
for i, ax in enumerate(axes):
    if i >= imgs.shape[0]:
        ax.axis('off')
        continue
    ax.imshow(imgs[i])
    ax.set_title(f'Label: {labels[i].item()}')
    ax.axis('off')
plt.tight_layout()
plt.show()
=== Estadísticas usando DataLoaders (muestras con transforms aplicadas) ===
Estadística          Train        Test         Drift Absoluto  Drift %   
--------------------------------------------------------------------------------
mean_r               0.201319     0.450829     0.249510        123.9376  
mean_g               0.194017     0.439190     0.245173        126.3665  
mean_b               0.187057     0.421824     0.234767        125.5059  
std_r                0.177292     0.244122     0.066830        37.6947   
std_g                0.167327     0.226756     0.059428        35.5162   
std_b                0.163185     0.226976     0.063791        39.0911   

Drift promedio (loader): 81.3520%
Drift máximo (loader): 126.3665%

Mostrando 12 imágenes aumentadas de ejemplo (train)
No description has been provided for this image
In [ ]:
train_labels = [targets[i] for i in train_indices]
test_labels = [targets[i] for i in test_indices]

# Contar clases
train_counts = Counter(train_labels)
test_counts = Counter(test_labels)

print('\n=== Distribución de Clases ===')
print(f'{"Clase":<20} {"Train":<10} {"Test":<10} {"Train %":<10} {"Test %":<10} {"Drift %":<10}')
print('-' * 80)

drifts = []
for i, class_name in enumerate(dataset.classes):
    train_count = train_counts[i]
    test_count = test_counts[i]
    train_pct = 100 * train_count / len(train_labels)
    test_pct = 100 * test_count / len(test_labels)
    drift = abs(train_pct - test_pct)
    drifts.append(drift)
    print(f'{class_name:<20} {train_count:<10} {test_count:<10} {train_pct:<10.2f} {test_pct:<10.2f} {drift:<10.4f}')

print(f'\nDrift promedio: {np.mean(drifts):.4f}%')
print(f'Drift máximo: {np.max(drifts):.4f}%')

# Visualización de la distribución
fig, (ax1, ax2) = plt.subplots(1, 2, figsize=(16, 6))

# Gráfica de barras comparativa
x = np.arange(len(dataset.classes))
width = 0.35

ax1.bar(x - width/2, [train_counts[i] for i in range(len(dataset.classes))], 
        width, label='Train', alpha=0.8, color='blue')
ax1.bar(x + width/2, [test_counts[i] for i in range(len(dataset.classes))], 
        width, label='Test', alpha=0.8, color='red')
ax1.set_xlabel('Clase', fontsize=11)
ax1.set_ylabel('Número de imágenes', fontsize=11)
ax1.set_title('Distribución de Clases: Train vs Test', fontsize=13, fontweight='bold')
ax1.set_xticks(x)
ax1.set_xticklabels(dataset.classes, rotation=45, ha='right', fontsize=9)
ax1.legend()
ax1.grid(True, alpha=0.3)

# Gráfica de drift
ax2.bar(x, drifts, color='orange', alpha=0.7)
ax2.set_xlabel('Clase', fontsize=11)
ax2.set_ylabel('Drift (%)', fontsize=11)
ax2.set_title('Drift de Distribución entre Train y Test', fontsize=13, fontweight='bold')
ax2.set_xticks(x)
ax2.set_xticklabels(dataset.classes, rotation=45, ha='right', fontsize=9)
ax2.axhline(y=np.mean(drifts), color='r', linestyle='--', label=f'Promedio: {np.mean(drifts):.4f}%')
ax2.legend()
ax2.grid(True, alpha=0.3)

plt.tight_layout()
plt.show()
=== Distribución de Clases ===
Clase                Train      Test       Train %    Test %     Drift %   
--------------------------------------------------------------------------------
badminton            734        183        6.48       6.47       0.0182    
baseball             577        144        5.10       5.09       0.0093    
basketball           385        96         3.40       3.39       0.0091    
boxing               556        139        4.91       4.91       0.0004    
chess                374        94         3.30       3.32       0.0174    
cricket              525        131        4.64       4.63       0.0092    
fencing              492        123        4.35       4.35       0.0004    
football             621        155        5.49       5.48       0.0093    
formula1             534        134        4.72       4.73       0.0173    
gymnastics           563        141        4.97       4.98       0.0084    
hockey               447        112        3.95       3.96       0.0085    
ice_hockey           558        139        4.93       4.91       0.0181    
kabaddi              354        88         3.13       3.11       0.0179    
motogp               526        132        4.65       4.66       0.0173    
shooting             418        105        3.69       3.71       0.0173    
swimming             540        135        4.77       4.77       0.0004    
table_tennis         557        139        4.92       4.91       0.0093    
tennis               562        141        4.97       4.98       0.0172    
volleyball           552        138        4.88       4.88       0.0004    
weight_lifting       448        112        3.96       3.96       0.0003    
wrestling            472        118        4.17       4.17       0.0004    
wwe                  524        131        4.63       4.63       0.0004    

Drift promedio: 0.0094%
Drift máximo: 0.0182%
No description has been provided for this image

Por lo visto las distribuciones entre el test y el conjunto de train, en la mayoria de clases no tienen un drift significativo

In [ ]:
print('\n=== Análisis de Drift de Píxeles ===')
print('Calculando estadísticas de píxeles (muestra de 50 imágenes por conjunto)...\n')

# Función para calcular estadísticas de píxeles de manera eficiente
def calcular_estadisticas_pixeles(indices, dataset, n_muestras=50):
    """Calcula media y std de píxeles RGB de una muestra del dataset"""
    muestra_indices = np.random.choice(indices, min(n_muestras, len(indices)), replace=False)
    
    medias_r, medias_g, medias_b = [], [], []
    stds_r, stds_g, stds_b = [], [], []
    
    for idx in muestra_indices:
        img_path = dataset.samples[idx][0]
        try:
            # Leer imagen sin transformaciones para estadísticas originales
            from PIL import Image
            img = Image.open(img_path).convert('RGB')
            img_array = np.array(img).astype(np.float32) / 255.0
            
            medias_r.append(img_array[:,:,0].mean())
            medias_g.append(img_array[:,:,1].mean())
            medias_b.append(img_array[:,:,2].mean())
            stds_r.append(img_array[:,:,0].std())
            stds_g.append(img_array[:,:,1].std())
            stds_b.append(img_array[:,:,2].std())
        except Exception as e:
            continue
    
    return {
        'mean_r': np.mean(medias_r), 'mean_g': np.mean(medias_g), 'mean_b': np.mean(medias_b),
        'std_r': np.mean(stds_r), 'std_g': np.mean(stds_g), 'std_b': np.mean(stds_b)
    }

# Calcular estadísticas para train y test
train_stats = calcular_estadisticas_pixeles(train_indices, dataset)
test_stats = calcular_estadisticas_pixeles(test_indices, dataset)

# Calcular drift
print(f'{"Estadística":<20} {"Train":<12} {"Test":<12} {"Drift Absoluto":<15} {"Drift %":<10}')
print('-' * 75)

for stat in ['mean_r', 'mean_g', 'mean_b', 'std_r', 'std_g', 'std_b']:
    train_val = train_stats[stat]
    test_val = test_stats[stat]
    drift_abs = abs(train_val - test_val)
    drift_pct = 100 * drift_abs / (train_val + 1e-10)
    print(f'{stat:<20} {train_val:<12.6f} {test_val:<12.6f} {drift_abs:<15.6f} {drift_pct:<10.4f}')

# Calcular drift global
all_drifts = [abs(train_stats[s] - test_stats[s]) / (train_stats[s] + 1e-10) * 100 
              for s in train_stats.keys()]
print(f'\nDrift promedio de píxeles: {np.mean(all_drifts):.4f}%')
print(f'Drift máximo de píxeles: {np.max(all_drifts):.4f}%')

# Visualización del drift de píxeles
fig, (ax1, ax2) = plt.subplots(1, 2, figsize=(15, 5))

# Comparación de medias RGB
canales = ['R', 'G', 'B']
train_means = [train_stats['mean_r'], train_stats['mean_g'], train_stats['mean_b']]
test_means = [test_stats['mean_r'], test_stats['mean_g'], test_stats['mean_b']]

x = np.arange(len(canales))
width = 0.35

ax1.bar(x - width/2, train_means, width, label='Train', alpha=0.8, color=['red', 'green', 'blue'])
ax1.bar(x + width/2, test_means, width, label='Test', alpha=0.6, color=['darkred', 'darkgreen', 'darkblue'])
ax1.set_xlabel('Canal', fontsize=12)
ax1.set_ylabel('Media de Píxeles [0-1]', fontsize=12)
ax1.set_title('Comparación de Medias de Píxeles RGB', fontsize=14, fontweight='bold')
ax1.set_xticks(x)
ax1.set_xticklabels(canales)
ax1.legend()
ax1.grid(True, alpha=0.3)

# Comparación de desviaciones estándar
train_stds = [train_stats['std_r'], train_stats['std_g'], train_stats['std_b']]
test_stds = [test_stats['std_r'], test_stats['std_g'], test_stats['std_b']]

ax2.bar(x - width/2, train_stds, width, label='Train', alpha=0.8, color=['red', 'green', 'blue'])
ax2.bar(x + width/2, test_stds, width, label='Test', alpha=0.6, color=['darkred', 'darkgreen', 'darkblue'])
ax2.set_xlabel('Canal', fontsize=12)
ax2.set_ylabel('Desviación Estándar [0-1]', fontsize=12)
ax2.set_title('Comparación de Desviaciones Estándar RGB', fontsize=14, fontweight='bold')
ax2.set_xticks(x)
ax2.set_xticklabels(canales)
ax2.legend()
ax2.grid(True, alpha=0.3)

plt.tight_layout()
plt.show()
=== Análisis de Drift de Píxeles ===
Calculando estadísticas de píxeles (muestra de 50 imágenes por conjunto)...

Estadística          Train        Test         Drift Absoluto  Drift %   
---------------------------------------------------------------------------
mean_r               0.451029     0.424263     0.026766        5.9344    
mean_g               0.445480     0.412353     0.033127        7.4362    
mean_b               0.433185     0.409924     0.023261        5.3698    
std_r                0.248482     0.244532     0.003950        1.5897    
std_g                0.228080     0.225105     0.002975        1.3045    
std_b                0.229111     0.226819     0.002292        1.0004    

Drift promedio de píxeles: 3.7725%
Drift máximo de píxeles: 7.4362%
No description has been provided for this image

Vemos que existe un porcentaje de drift considerable en el verde, sin embargo vemos en la media estandar de los 3 colores que la del rojo es la que tiene el drift más alto sin embargo cosidero aceptable estos porcentajes.

Existe un drift moderado een el canal verde y azul en contraste con el rojo

Modelos Disponibles: VGG16 y AlexNet con Transfer Learning¶

Implementaremos dos arquitecturas con las siguientes características:

VGG16:

  • Bloques convolucionales 1-3: Congelados si se quiere - extracción de características básicas
  • Bloques convolucionales 4-5: Entrenables - ajuste fino para deportes
  • Capas densas personalizadas con regularización L2 y Dropout
  • Total: ~134M parámetros | Entrenables: ~132M

AlexNet:

  • Capas convolucionales 1-10: Congeladas si se quiere - extracción de características básicas
  • Capas 11+: Entrenables - ajuste fino para deportes
  • Capas densas personalizadas con Dropout
  • Total: ~57M parámetros | Entrenables: ~57M
In [ ]:
MODEL_TYPE = 'alexnet'  # Opciones: 'vgg16' o 'alexnet'

import torch
import torch.nn as nn
import torchvision.models as models  # (no se usa para pesos; se mantiene por compatibilidad)

# =========================
# Utilidades de congelación
# =========================
def freeze_first_n_blocks_sequential(features: nn.Sequential, n_blocks: int):
    """
    Congela parámetros de las primeras n_blocks regiones separadas por MaxPool2d.
    Se recorre 'features' y se incrementa el contador al encontrar MaxPool2d.
    """
    if n_blocks <= 0:
        return
    blocks_frozen = 0
    for layer in features:
        # Mientras no hayamos completado los n bloques, se congela este layer
        if blocks_frozen < n_blocks:
            for p in layer.parameters():
                p.requires_grad = False
        # Al encontrar un MaxPool, consideramos que terminó un bloque
        if isinstance(layer, nn.MaxPool2d):
            blocks_frozen += 1
        if blocks_frozen >= n_blocks:
            # El resto de capas quedan entrenables
            continue

# =========================
# VGG16 desde cero (custom)
# =========================
class VGG16Custom(nn.Module):
    """
    Implementación de VGG16 (configuración D) desde cero.
    Entrada esperada: 224x224 RGB.
    """
    def __init__(self, num_classes: int = 22):
        super().__init__()
        self.features = nn.Sequential(
            # Bloque 1
            nn.Conv2d(3, 64, kernel_size=3, padding=1), nn.ReLU(inplace=True),
            nn.Conv2d(64, 64, kernel_size=3, padding=1), nn.ReLU(inplace=True),
            nn.MaxPool2d(kernel_size=2, stride=2),  # /2

            # Bloque 2
            nn.Conv2d(64, 128, kernel_size=3, padding=1), nn.ReLU(inplace=True),
            nn.Conv2d(128, 128, kernel_size=3, padding=1), nn.ReLU(inplace=True),
            nn.MaxPool2d(kernel_size=2, stride=2),  # /2

            # Bloque 3
            nn.Conv2d(128, 256, kernel_size=3, padding=1), nn.ReLU(inplace=True),
            nn.Conv2d(256, 256, kernel_size=3, padding=1), nn.ReLU(inplace=True),
            nn.Conv2d(256, 256, kernel_size=3, padding=1), nn.ReLU(inplace=True),
            nn.MaxPool2d(kernel_size=2, stride=2),  # /2

            # Bloque 4
            nn.Conv2d(256, 512, kernel_size=3, padding=1), nn.ReLU(inplace=True),
            nn.Conv2d(512, 512, kernel_size=3, padding=1), nn.ReLU(inplace=True),
            nn.Conv2d(512, 512, kernel_size=3, padding=1), nn.ReLU(inplace=True),
            nn.MaxPool2d(kernel_size=2, stride=2),  # /2

            # Bloque 5
            nn.Conv2d(512, 512, kernel_size=3, padding=1), nn.ReLU(inplace=True),
            nn.Conv2d(512, 512, kernel_size=3, padding=1), nn.ReLU(inplace=True),
            nn.Conv2d(512, 512, kernel_size=3, padding=1), nn.ReLU(inplace=True),
            nn.MaxPool2d(kernel_size=2, stride=2),  # /2
        )

        # 224 -> 112 -> 56 -> 28 -> 14 -> 7
        self.avgpool = nn.AdaptiveAvgPool2d((7, 7))

        self.classifier = nn.Sequential(
            nn.Linear(512 * 7 * 7, 4096),
            nn.ReLU(inplace=True),
            nn.Dropout(0.3),
            nn.Linear(4096, 4096),
            nn.ReLU(inplace=True),
            nn.Dropout(0.5),
            nn.Linear(4096, num_classes),
        )

        self._init_weights()

    def _init_weights(self):
        for m in self.modules():
            if isinstance(m, nn.Conv2d):
                nn.init.kaiming_normal_(m.weight, mode='fan_out', nonlinearity='relu')
                if m.bias is not None:
                    nn.init.constant_(m.bias, 0)
            elif isinstance(m, nn.Linear):
                nn.init.normal_(m.weight, 0, 0.01)
                nn.init.constant_(m.bias, 0)

    def forward(self, x):
        x = self.features(x)
        x = self.avgpool(x)
        x = torch.flatten(x, 1)
        x = self.classifier(x)
        return x

def create_vgg16_model(num_classes=22, freeze_blocks=3):
    """
    Crea modelo VGG16 desde cero con opción de congelar los primeros 'freeze_blocks' bloques.
    Mantiene el nombre de la función original.
    """
    vgg16 = VGG16Custom(num_classes=num_classes)
    # Congelar bloques 1..freeze_blocks (cada bloque termina en MaxPool)
    if freeze_blocks and freeze_blocks > 0:
        freeze_first_n_blocks_sequential(vgg16.features, freeze_blocks)
    return vgg16

# =========================
# AlexNet desde cero (custom)
# =========================
class AlexNetCustom(nn.Module):
    """
    Implementación completa de AlexNet desde cero (Krizhevsky et al., 2012).
    Entrada esperada: 224x224 RGB.
    """
    def __init__(self, num_classes=22):
        super().__init__()
        self.features = nn.Sequential(
            # Conv1: 224 -> 55
            nn.Conv2d(3, 64, kernel_size=11, stride=4, padding=2),
            nn.ReLU(inplace=True),
            nn.MaxPool2d(kernel_size=3, stride=2),

            # Conv2: 55 -> 27
            nn.Conv2d(64, 192, kernel_size=5, padding=2),
            nn.ReLU(inplace=True),
            nn.MaxPool2d(kernel_size=3, stride=2),

            # Conv3: 27 -> 27
            nn.Conv2d(192, 384, kernel_size=3, padding=1),
            nn.ReLU(inplace=True),

            # Conv4: 27 -> 27
            nn.Conv2d(384, 256, kernel_size=3, padding=1),
            nn.ReLU(inplace=True),

            # Conv5: 27 -> 13
            nn.Conv2d(256, 256, kernel_size=3, padding=1),
            nn.ReLU(inplace=True),
            nn.MaxPool2d(kernel_size=3, stride=2),
        )
        self.avgpool = nn.AdaptiveAvgPool2d((6, 6))
        self.classifier = nn.Sequential(
            nn.Dropout(0.5),
            nn.Linear(256 * 6 * 6, 4096),
            nn.ReLU(inplace=True),
            nn.Dropout(0.3),
            nn.Linear(4096, 4096),
            nn.ReLU(inplace=True),
            nn.Dropout(0.5),
            nn.Linear(4096, num_classes),
        )
        self._init_weights()

    def _init_weights(self):
        for m in self.modules():
            if isinstance(m, nn.Conv2d):
                nn.init.kaiming_normal_(m.weight, mode='fan_out', nonlinearity='relu')
                if m.bias is not None:
                    nn.init.constant_(m.bias, 0)
            elif isinstance(m, nn.Linear):
                nn.init.normal_(m.weight, 0, 0.01)
                nn.init.constant_(m.bias, 0)

    def forward(self, x):
        x = self.features(x)
        x = self.avgpool(x)
        x = torch.flatten(x, 1)  # 256*6*6 = 9216
        x = self.classifier(x)
        return x

def create_alexnet_model(num_classes=22, freeze_blocks=3):
    """
    Crea modelo AlexNet desde cero con opción de congelar los primeros 'freeze_blocks' bloques.
    Mantiene el nombre de la función original.
    """
    alexnet = AlexNetCustom(num_classes=num_classes)
    if freeze_blocks and freeze_blocks > 0:
        freeze_first_n_blocks_sequential(alexnet.features, freeze_blocks)
    return alexnet

# Crear el modelo según la configuración
print(f'\n=== Creando modelo {MODEL_TYPE.upper()} con Transfer Learning ===')

if MODEL_TYPE.lower() == 'vgg16':
    model = create_vgg16_model(num_classes=len(dataset.classes), freeze_blocks=3)
    model_name = 'VGG16'
elif MODEL_TYPE.lower() == 'alexnet':
    model = create_alexnet_model(num_classes=len(dataset.classes), freeze_blocks=0)
    model_name = 'AlexNet'
else:
    raise ValueError(f"MODEL_TYPE debe ser 'vgg16' o 'alexnet', no '{MODEL_TYPE}'")

model = model.to(device)

# Contar parámetros entrenables y no entrenables
total_params = sum(p.numel() for p in model.parameters())
trainable_params = sum(p.numel() for p in model.parameters() if p.requires_grad)
frozen_params = total_params - trainable_params

print(f'\n=== Arquitectura del Modelo ===')
print(f'Modelo: {model_name}')
print(f'\nNúmero total de parámetros: {total_params:,}')
print(f'Parámetros entrenables: {trainable_params:,}')
print(f'Parámetros congelados: {frozen_params:,}')
print(f'\nEstructura:')
if MODEL_TYPE.lower() == 'vgg16':
    print(f'  - Bloques 1-3: CONGELADOS (extracción de características)')
    print(f'  - Bloques 4-5: ENTRENABLES (ajuste fino)')
    print(f'  - Clasificador: 25088 → 4096 → Dropout(0.3) → 4096 → Dropout(0.5) → {len(dataset.classes)}')
else:
    print(f'  - Capas 1-10: CONGELADAS (extracción de características)')
    print(f'  - Capas 11+: ENTRENABLES (ajuste fino)')
    print(f'  - Clasificador: 9216 → Dropout(0.5) → 4096 → Dropout(0.3) → 4096 → Dropout(0.5) → {len(dataset.classes)}')
=== Creando modelo ALEXNET con Transfer Learning ===

=== Arquitectura del Modelo ===
Modelo: AlexNet

Número total de parámetros: 57,093,974
Parámetros entrenables: 57,093,974
Parámetros congelados: 0

Estructura:
  - Capas 1-10: CONGELADAS (extracción de características)
  - Capas 11+: ENTRENABLES (ajuste fino)
  - Clasificador: 9216 → Dropout(0.5) → 4096 → Dropout(0.3) → 4096 → Dropout(0.5) → 22

=== Arquitectura del Modelo ===
Modelo: AlexNet

Número total de parámetros: 57,093,974
Parámetros entrenables: 57,093,974
Parámetros congelados: 0

Estructura:
  - Capas 1-10: CONGELADAS (extracción de características)
  - Capas 11+: ENTRENABLES (ajuste fino)
  - Clasificador: 9216 → Dropout(0.5) → 4096 → Dropout(0.3) → 4096 → Dropout(0.5) → 22
In [ ]:
# Configuración de entrenamiento

# Hiperparámetros
BATCH_SIZE = 32
NUM_EPOCHS = 150 
LEARNING_RATE = 1e-4  

# Función de pérdida y optimizador con regularización L2
criterion = nn.CrossEntropyLoss()
optimizer = optim.Adam(model.parameters(), lr=LEARNING_RATE)

# Calcular class weights para compensar desbalance
from collections import Counter
train_labels = [targets[i] for i in train_indices]
class_counts = Counter(train_labels)
max_count = float(max(class_counts.values()))
class_weights_dict = {class_id: max_count / num_images for class_id, num_images in class_counts.items()}
class_weights_tensor = torch.tensor([class_weights_dict[i] for i in range(len(dataset.classes))], dtype=torch.float32).to(device)

# Actualizar criterion con class weights
criterion = nn.CrossEntropyLoss(weight=class_weights_tensor)


from torch.optim.lr_scheduler import ReduceLROnPlateau
import copy

# Learning Rate Scheduler: reduce LR cuando test loss no mejora
scheduler = ReduceLROnPlateau(
    optimizer,
    mode='min',           # minimizar test_loss
    factor=0.5,           # reducir LR a la mitad
    patience=8,           # esperar 8 épocas sin mejora
    verbose=True,         # imprimir cuando se reduzca LR
    min_lr=1e-7           # LR mínimo
)

# Checkpointing: guardar mejor modelo (por test_accuracy)
best_test_acc = 0.0
best_model_wts = copy.deepcopy(model.state_dict())
best_epoch = 0
save_best_path = f'{MODEL_TYPE}_best_checkpoint.pth'


early_stopping_patience = 15  # detener después de 15 épocas sin mejora
no_improve_epochs = 0

print(f'\\n=== Configuración de Entrenamiento ===')
print(f'Modelo: {model_name}')
print(f'Batch size: {BATCH_SIZE}')
print(f'Épocas: {NUM_EPOCHS}')
print(f'Learning rate: {LEARNING_RATE}')
print(f'Optimizador: Adam con weight_decay=0')
print(f'Función de pérdida: CrossEntropyLoss con class weights')
print(f'\\n=== Mejoras Aplicadas ===')
print(f'✓ ReduceLROnPlateau: factor=0.5, patience=8')
print(f'✓ Checkpointing: guardando mejor modelo en {save_best_path}')
print(f'✓ Early Stopping: patience={early_stopping_patience} épocas')
\n=== Configuración de Entrenamiento ===
Modelo: AlexNet
Batch size: 32
Épocas: 150
Learning rate: 0.0001
Optimizador: Adam con weight_decay=0
Función de pérdida: CrossEntropyLoss con class weights
\n=== Mejoras Aplicadas ===
✓ ReduceLROnPlateau: factor=0.5, patience=8
✓ Checkpointing: guardando mejor modelo en alexnet_best_checkpoint.pth
✓ Early Stopping: patience=15 épocas
In [50]:
device = torch.device('cuda' if torch.cuda.is_available() else 'cpu')
print(f'Usando dispositivo: {device}')
Usando dispositivo: cuda
In [ ]:
train_losses = []
train_accuracies = []
test_losses = []
test_accuracies = []

print(f'\n=== Iniciando Entrenamiento de {model_name} ===')
print(f'Total de épocas: {NUM_EPOCHS}')
print(f'Entrenamiento en: {device}\n')

start_time = time.time()

for epoch in range(NUM_EPOCHS):
    epoch_start = time.time()
    
    # ========== FASE DE ENTRENAMIENTO ==========
    model.train()
    running_loss = 0.0
    correct = 0
    total = 0
    
    for batch_idx, (images, labels) in enumerate(train_loader):
        images, labels = images.to(device), labels.to(device)
        
        # Forward pass
        optimizer.zero_grad()
        outputs = model(images)
        loss = criterion(outputs, labels)
        
        # Backward pass y optimización
        loss.backward()
        optimizer.step()
        
        # Estadísticas
        running_loss += loss.item()
        _, predicted = torch.max(outputs.data, 1)
        total += labels.size(0)
        correct += (predicted == labels).sum().item()
        
        if (batch_idx + 1) % 50 == 0:
            print(f'Epoch [{epoch+1}/{NUM_EPOCHS}], Step [{batch_idx+1}/{len(train_loader)}], '
                  f'Loss: {loss.item():.4f}, Acc: {100*correct/total:.2f}%')
    
    train_loss = running_loss / len(train_loader)
    train_accuracy = 100 * correct / total
    train_losses.append(train_loss)
    train_accuracies.append(train_accuracy)
    

    model.eval()
    test_loss = 0.0
    correct = 0
    total = 0
    
    with torch.no_grad():
        for images, labels in test_loader:
            images, labels = images.to(device), labels.to(device)
            outputs = model(images)
            loss = criterion(outputs, labels)
            
            test_loss += loss.item()
            _, predicted = torch.max(outputs.data, 1)
            total += labels.size(0)
            correct += (predicted == labels).sum().item()
    
    test_loss = test_loss / len(test_loader)
    test_accuracy = 100 * correct / total
    test_losses.append(test_loss)
    test_accuracies.append(test_accuracy)
    
    epoch_time = time.time() - epoch_start

    # ========== SCHEDULER: reducir LR si test_loss no mejora ==========
    scheduler.step(test_loss)
    
    # ========== CHECKPOINTING: guardar mejor modelo ==========
    if test_accuracy > best_test_acc:
        best_test_acc = test_accuracy
        best_epoch = epoch + 1
        best_model_wts = copy.deepcopy(model.state_dict())
        torch.save({
            'epoch': best_epoch,
            'model_state_dict': best_model_wts,
            'optimizer_state_dict': optimizer.state_dict(),
            'test_accuracy': best_test_acc,
            'test_loss': test_loss,
            'train_accuracy': train_accuracy,
            'train_loss': train_loss,
            'class_names': dataset.classes,
            'model_type': MODEL_TYPE
        }, save_best_path)
        no_improve_epochs = 0
        print(f'✓ Nuevo mejor modelo guardado: Test Acc = {best_test_acc:.2f}% (época {best_epoch})')
    else:
        no_improve_epochs += 1

    # Mostrar progreso cada época
    print(f'\n{"="*80}')
    print(f'Época [{epoch+1}/{NUM_EPOCHS}] Completada')
    print(f'{"="*80}')
    print(f'Train Loss: {train_loss:.4f} | Train Acc: {train_accuracy:.2f}%')
    print(f'Test Loss:  {test_loss:.4f} | Test Acc:  {test_accuracy:.2f}%')
    print(f'Gap (Overfitting): {train_accuracy - test_accuracy:.2f}%')
    print(f'Mejor Test Acc hasta ahora: {best_test_acc:.2f}% (época {best_epoch})')
    print(f'Épocas sin mejora: {no_improve_epochs}/{early_stopping_patience}')
    print(f'Learning Rate actual: {optimizer.param_groups[0]["lr"]:.2e}')
    print(f'Tiempo de época: {epoch_time:.2f}s')
    print(f'{"="*80}\n')
    
    # ========== EARLY STOPPING ==========
    if no_improve_epochs >= early_stopping_patience:
        print(f'\n{"!"*80}')
        print(f'{"EARLY STOPPING ACTIVADO":^80}')
        print(f'{"!"*80}')
        print(f'No se observó mejora en Test Accuracy durante {early_stopping_patience} épocas consecutivas.')
        print(f'Deteniendo entrenamiento en época {epoch+1}.')
        print(f'Mejor modelo: época {best_epoch} con Test Acc = {best_test_acc:.2f}%')
        print(f'{"!"*80}\n')
        break

total_time = time.time() - start_time

# Cargar mejor modelo para evaluación final
print(f'\n{"*"*80}')
print(f'Cargando mejor modelo (época {best_epoch}) para evaluación final...')
model.load_state_dict(best_model_wts)
print(f'{"*"*80}\n')

print(f'\n{"#"*80}')
print(f'{"ENTRENAMIENTO COMPLETADO":^80}')
print(f'{"#"*80}')
print(f'Tiempo total: {total_time/60:.2f} minutos ({total_time:.2f} segundos)')
print(f'Épocas completadas: {len(train_losses)}')
print(f'Mejor Test Accuracy: {best_test_acc:.2f}% (época {best_epoch})')
print(f'Precisión final de entrenamiento: {train_accuracies[-1]:.2f}%')
print(f'Precisión final de prueba: {test_accuracies[-1]:.2f}%')
print(f'Gap final: {train_accuracies[-1] - test_accuracies[-1]:.2f}%')
print(f'{"#"*80}\n')
=== Iniciando Entrenamiento de AlexNet ===
Total de épocas: 150
Entrenamiento en: cuda

Epoch [1/150], Step [50/354], Loss: 3.0912, Acc: 5.12%
Epoch [1/150], Step [50/354], Loss: 3.0912, Acc: 5.12%
Epoch [1/150], Step [100/354], Loss: 3.1110, Acc: 5.06%
Epoch [1/150], Step [100/354], Loss: 3.1110, Acc: 5.06%
Epoch [1/150], Step [150/354], Loss: 3.0636, Acc: 5.23%
Epoch [1/150], Step [150/354], Loss: 3.0636, Acc: 5.23%
Epoch [1/150], Step [200/354], Loss: 2.9660, Acc: 6.00%
Epoch [1/150], Step [200/354], Loss: 2.9660, Acc: 6.00%
Epoch [1/150], Step [250/354], Loss: 3.0736, Acc: 6.60%
Epoch [1/150], Step [250/354], Loss: 3.0736, Acc: 6.60%
Epoch [1/150], Step [300/354], Loss: 2.8892, Acc: 7.12%
Epoch [1/150], Step [300/354], Loss: 2.8892, Acc: 7.12%
Epoch [1/150], Step [350/354], Loss: 2.8521, Acc: 7.72%
Epoch [1/150], Step [350/354], Loss: 2.8521, Acc: 7.72%
✓ Nuevo mejor modelo guardado: Test Acc = 12.47% (época 1)

================================================================================
Época [1/150] Completada
================================================================================
Train Loss: 3.0027 | Train Acc: 7.75%
Test Loss:  2.8159 | Test Acc:  12.47%
Gap (Overfitting): -4.73%
Mejor Test Acc hasta ahora: 12.47% (época 1)
Épocas sin mejora: 0/15
Learning Rate actual: 1.00e-04
Tiempo de época: 169.90s
================================================================================

✓ Nuevo mejor modelo guardado: Test Acc = 12.47% (época 1)

================================================================================
Época [1/150] Completada
================================================================================
Train Loss: 3.0027 | Train Acc: 7.75%
Test Loss:  2.8159 | Test Acc:  12.47%
Gap (Overfitting): -4.73%
Mejor Test Acc hasta ahora: 12.47% (época 1)
Épocas sin mejora: 0/15
Learning Rate actual: 1.00e-04
Tiempo de época: 169.90s
================================================================================

Epoch [2/150], Step [50/354], Loss: 2.7886, Acc: 10.12%
Epoch [2/150], Step [50/354], Loss: 2.7886, Acc: 10.12%
Epoch [2/150], Step [100/354], Loss: 2.7413, Acc: 9.66%
Epoch [2/150], Step [100/354], Loss: 2.7413, Acc: 9.66%
Epoch [2/150], Step [150/354], Loss: 2.7252, Acc: 10.44%
Epoch [2/150], Step [150/354], Loss: 2.7252, Acc: 10.44%
Epoch [2/150], Step [200/354], Loss: 2.5579, Acc: 10.91%
Epoch [2/150], Step [200/354], Loss: 2.5579, Acc: 10.91%
Epoch [2/150], Step [250/354], Loss: 2.7336, Acc: 11.25%
Epoch [2/150], Step [250/354], Loss: 2.7336, Acc: 11.25%
Epoch [2/150], Step [300/354], Loss: 3.0027, Acc: 11.92%
Epoch [2/150], Step [300/354], Loss: 3.0027, Acc: 11.92%
Epoch [2/150], Step [350/354], Loss: 2.6538, Acc: 12.34%
Epoch [2/150], Step [350/354], Loss: 2.6538, Acc: 12.34%
✓ Nuevo mejor modelo guardado: Test Acc = 16.29% (época 2)

================================================================================
Época [2/150] Completada
================================================================================
Train Loss: 2.8325 | Train Acc: 12.40%
Test Loss:  2.6644 | Test Acc:  16.29%
Gap (Overfitting): -3.89%
Mejor Test Acc hasta ahora: 16.29% (época 2)
Épocas sin mejora: 0/15
Learning Rate actual: 1.00e-04
Tiempo de época: 165.55s
================================================================================

✓ Nuevo mejor modelo guardado: Test Acc = 16.29% (época 2)

================================================================================
Época [2/150] Completada
================================================================================
Train Loss: 2.8325 | Train Acc: 12.40%
Test Loss:  2.6644 | Test Acc:  16.29%
Gap (Overfitting): -3.89%
Mejor Test Acc hasta ahora: 16.29% (época 2)
Épocas sin mejora: 0/15
Learning Rate actual: 1.00e-04
Tiempo de época: 165.55s
================================================================================

Epoch [3/150], Step [50/354], Loss: 2.8094, Acc: 14.38%
Epoch [3/150], Step [50/354], Loss: 2.8094, Acc: 14.38%
Epoch [3/150], Step [100/354], Loss: 2.6584, Acc: 14.53%
Epoch [3/150], Step [100/354], Loss: 2.6584, Acc: 14.53%
Epoch [3/150], Step [150/354], Loss: 2.5974, Acc: 14.38%
Epoch [3/150], Step [150/354], Loss: 2.5974, Acc: 14.38%
Epoch [3/150], Step [200/354], Loss: 2.8930, Acc: 14.97%
Epoch [3/150], Step [200/354], Loss: 2.8930, Acc: 14.97%
Epoch [3/150], Step [250/354], Loss: 2.6534, Acc: 15.29%
Epoch [3/150], Step [250/354], Loss: 2.6534, Acc: 15.29%
Epoch [3/150], Step [300/354], Loss: 2.4304, Acc: 15.39%
Epoch [3/150], Step [300/354], Loss: 2.4304, Acc: 15.39%
Epoch [3/150], Step [350/354], Loss: 2.6535, Acc: 15.29%
Epoch [3/150], Step [350/354], Loss: 2.6535, Acc: 15.29%
✓ Nuevo mejor modelo guardado: Test Acc = 18.45% (época 3)

================================================================================
Época [3/150] Completada
================================================================================
Train Loss: 2.7431 | Train Acc: 15.30%
Test Loss:  2.5836 | Test Acc:  18.45%
Gap (Overfitting): -3.14%
Mejor Test Acc hasta ahora: 18.45% (época 3)
Épocas sin mejora: 0/15
Learning Rate actual: 1.00e-04
Tiempo de época: 163.23s
================================================================================

✓ Nuevo mejor modelo guardado: Test Acc = 18.45% (época 3)

================================================================================
Época [3/150] Completada
================================================================================
Train Loss: 2.7431 | Train Acc: 15.30%
Test Loss:  2.5836 | Test Acc:  18.45%
Gap (Overfitting): -3.14%
Mejor Test Acc hasta ahora: 18.45% (época 3)
Épocas sin mejora: 0/15
Learning Rate actual: 1.00e-04
Tiempo de época: 163.23s
================================================================================

Epoch [4/150], Step [50/354], Loss: 2.5774, Acc: 15.44%
Epoch [4/150], Step [50/354], Loss: 2.5774, Acc: 15.44%
Epoch [4/150], Step [100/354], Loss: 2.5490, Acc: 16.78%
Epoch [4/150], Step [100/354], Loss: 2.5490, Acc: 16.78%
Epoch [4/150], Step [150/354], Loss: 2.6475, Acc: 17.29%
Epoch [4/150], Step [150/354], Loss: 2.6475, Acc: 17.29%
Epoch [4/150], Step [200/354], Loss: 2.5939, Acc: 17.42%
Epoch [4/150], Step [200/354], Loss: 2.5939, Acc: 17.42%
Epoch [4/150], Step [250/354], Loss: 2.8799, Acc: 17.48%
Epoch [4/150], Step [250/354], Loss: 2.8799, Acc: 17.48%
Epoch [4/150], Step [300/354], Loss: 2.6315, Acc: 17.34%
Epoch [4/150], Step [300/354], Loss: 2.6315, Acc: 17.34%
Epoch [4/150], Step [350/354], Loss: 2.6364, Acc: 17.41%
Epoch [4/150], Step [350/354], Loss: 2.6364, Acc: 17.41%
✓ Nuevo mejor modelo guardado: Test Acc = 20.99% (época 4)

================================================================================
Época [4/150] Completada
================================================================================
Train Loss: 2.6625 | Train Acc: 17.41%
Test Loss:  2.5709 | Test Acc:  20.99%
Gap (Overfitting): -3.58%
Mejor Test Acc hasta ahora: 20.99% (época 4)
Épocas sin mejora: 0/15
Learning Rate actual: 1.00e-04
Tiempo de época: 162.92s
================================================================================

✓ Nuevo mejor modelo guardado: Test Acc = 20.99% (época 4)

================================================================================
Época [4/150] Completada
================================================================================
Train Loss: 2.6625 | Train Acc: 17.41%
Test Loss:  2.5709 | Test Acc:  20.99%
Gap (Overfitting): -3.58%
Mejor Test Acc hasta ahora: 20.99% (época 4)
Épocas sin mejora: 0/15
Learning Rate actual: 1.00e-04
Tiempo de época: 162.92s
================================================================================

Epoch [5/150], Step [50/354], Loss: 2.6782, Acc: 17.19%
Epoch [5/150], Step [50/354], Loss: 2.6782, Acc: 17.19%
Epoch [5/150], Step [100/354], Loss: 2.7232, Acc: 17.88%
Epoch [5/150], Step [100/354], Loss: 2.7232, Acc: 17.88%
Epoch [5/150], Step [150/354], Loss: 2.7814, Acc: 18.44%
Epoch [5/150], Step [150/354], Loss: 2.7814, Acc: 18.44%
Epoch [5/150], Step [200/354], Loss: 2.2956, Acc: 18.58%
Epoch [5/150], Step [200/354], Loss: 2.2956, Acc: 18.58%
Epoch [5/150], Step [250/354], Loss: 2.7368, Acc: 19.07%
Epoch [5/150], Step [250/354], Loss: 2.7368, Acc: 19.07%
Epoch [5/150], Step [300/354], Loss: 2.6854, Acc: 19.43%
Epoch [5/150], Step [300/354], Loss: 2.6854, Acc: 19.43%
Epoch [5/150], Step [350/354], Loss: 2.5749, Acc: 19.75%
Epoch [5/150], Step [350/354], Loss: 2.5749, Acc: 19.75%
✓ Nuevo mejor modelo guardado: Test Acc = 22.54% (época 5)

================================================================================
Época [5/150] Completada
================================================================================
Train Loss: 2.5962 | Train Acc: 19.74%
Test Loss:  2.4989 | Test Acc:  22.54%
Gap (Overfitting): -2.81%
Mejor Test Acc hasta ahora: 22.54% (época 5)
Épocas sin mejora: 0/15
Learning Rate actual: 1.00e-04
Tiempo de época: 166.80s
================================================================================

✓ Nuevo mejor modelo guardado: Test Acc = 22.54% (época 5)

================================================================================
Época [5/150] Completada
================================================================================
Train Loss: 2.5962 | Train Acc: 19.74%
Test Loss:  2.4989 | Test Acc:  22.54%
Gap (Overfitting): -2.81%
Mejor Test Acc hasta ahora: 22.54% (época 5)
Épocas sin mejora: 0/15
Learning Rate actual: 1.00e-04
Tiempo de época: 166.80s
================================================================================

Epoch [6/150], Step [50/354], Loss: 2.5119, Acc: 20.56%
Epoch [6/150], Step [50/354], Loss: 2.5119, Acc: 20.56%
Epoch [6/150], Step [100/354], Loss: 2.4406, Acc: 21.28%
Epoch [6/150], Step [100/354], Loss: 2.4406, Acc: 21.28%
Epoch [6/150], Step [150/354], Loss: 2.4764, Acc: 21.19%
Epoch [6/150], Step [150/354], Loss: 2.4764, Acc: 21.19%
Epoch [6/150], Step [200/354], Loss: 2.3899, Acc: 21.05%
Epoch [6/150], Step [200/354], Loss: 2.3899, Acc: 21.05%
Epoch [6/150], Step [250/354], Loss: 2.6803, Acc: 21.25%
Epoch [6/150], Step [250/354], Loss: 2.6803, Acc: 21.25%
Epoch [6/150], Step [300/354], Loss: 2.5300, Acc: 21.73%
Epoch [6/150], Step [300/354], Loss: 2.5300, Acc: 21.73%
Epoch [6/150], Step [350/354], Loss: 2.2818, Acc: 22.08%
Epoch [6/150], Step [350/354], Loss: 2.2818, Acc: 22.08%
✓ Nuevo mejor modelo guardado: Test Acc = 26.43% (época 6)

================================================================================
Época [6/150] Completada
================================================================================
Train Loss: 2.5437 | Train Acc: 22.10%
Test Loss:  2.4256 | Test Acc:  26.43%
Gap (Overfitting): -4.34%
Mejor Test Acc hasta ahora: 26.43% (época 6)
Épocas sin mejora: 0/15
Learning Rate actual: 1.00e-04
Tiempo de época: 166.04s
================================================================================

✓ Nuevo mejor modelo guardado: Test Acc = 26.43% (época 6)

================================================================================
Época [6/150] Completada
================================================================================
Train Loss: 2.5437 | Train Acc: 22.10%
Test Loss:  2.4256 | Test Acc:  26.43%
Gap (Overfitting): -4.34%
Mejor Test Acc hasta ahora: 26.43% (época 6)
Épocas sin mejora: 0/15
Learning Rate actual: 1.00e-04
Tiempo de época: 166.04s
================================================================================

Epoch [7/150], Step [50/354], Loss: 2.0520, Acc: 26.38%
Epoch [7/150], Step [50/354], Loss: 2.0520, Acc: 26.38%
Epoch [7/150], Step [100/354], Loss: 2.3675, Acc: 24.50%
Epoch [7/150], Step [100/354], Loss: 2.3675, Acc: 24.50%
Epoch [7/150], Step [150/354], Loss: 2.2859, Acc: 25.21%
Epoch [7/150], Step [150/354], Loss: 2.2859, Acc: 25.21%
Epoch [7/150], Step [200/354], Loss: 2.5716, Acc: 25.41%
Epoch [7/150], Step [200/354], Loss: 2.5716, Acc: 25.41%
Epoch [7/150], Step [250/354], Loss: 2.4591, Acc: 24.90%
Epoch [7/150], Step [250/354], Loss: 2.4591, Acc: 24.90%
Epoch [7/150], Step [300/354], Loss: 2.6203, Acc: 24.82%
Epoch [7/150], Step [300/354], Loss: 2.6203, Acc: 24.82%
Epoch [7/150], Step [350/354], Loss: 2.2211, Acc: 24.34%
Epoch [7/150], Step [350/354], Loss: 2.2211, Acc: 24.34%

================================================================================
Época [7/150] Completada
================================================================================
Train Loss: 2.4720 | Train Acc: 24.38%
Test Loss:  2.4056 | Test Acc:  25.97%
Gap (Overfitting): -1.59%
Mejor Test Acc hasta ahora: 26.43% (época 6)
Épocas sin mejora: 1/15
Learning Rate actual: 1.00e-04
Tiempo de época: 166.61s
================================================================================


================================================================================
Época [7/150] Completada
================================================================================
Train Loss: 2.4720 | Train Acc: 24.38%
Test Loss:  2.4056 | Test Acc:  25.97%
Gap (Overfitting): -1.59%
Mejor Test Acc hasta ahora: 26.43% (época 6)
Épocas sin mejora: 1/15
Learning Rate actual: 1.00e-04
Tiempo de época: 166.61s
================================================================================

Epoch [8/150], Step [50/354], Loss: 2.3345, Acc: 27.44%
Epoch [8/150], Step [50/354], Loss: 2.3345, Acc: 27.44%
Epoch [8/150], Step [100/354], Loss: 2.3443, Acc: 26.47%
Epoch [8/150], Step [100/354], Loss: 2.3443, Acc: 26.47%
Epoch [8/150], Step [150/354], Loss: 2.4045, Acc: 26.08%
Epoch [8/150], Step [150/354], Loss: 2.4045, Acc: 26.08%
Epoch [8/150], Step [200/354], Loss: 2.4555, Acc: 25.94%
Epoch [8/150], Step [200/354], Loss: 2.4555, Acc: 25.94%
Epoch [8/150], Step [250/354], Loss: 2.2684, Acc: 26.27%
Epoch [8/150], Step [250/354], Loss: 2.2684, Acc: 26.27%
Epoch [8/150], Step [300/354], Loss: 2.7813, Acc: 26.38%
Epoch [8/150], Step [300/354], Loss: 2.7813, Acc: 26.38%
Epoch [8/150], Step [350/354], Loss: 2.1471, Acc: 26.46%
Epoch [8/150], Step [350/354], Loss: 2.1471, Acc: 26.46%
✓ Nuevo mejor modelo guardado: Test Acc = 32.23% (época 8)

================================================================================
Época [8/150] Completada
================================================================================
Train Loss: 2.4137 | Train Acc: 26.43%
Test Loss:  2.2067 | Test Acc:  32.23%
Gap (Overfitting): -5.79%
Mejor Test Acc hasta ahora: 32.23% (época 8)
Épocas sin mejora: 0/15
Learning Rate actual: 1.00e-04
Tiempo de época: 163.11s
================================================================================

✓ Nuevo mejor modelo guardado: Test Acc = 32.23% (época 8)

================================================================================
Época [8/150] Completada
================================================================================
Train Loss: 2.4137 | Train Acc: 26.43%
Test Loss:  2.2067 | Test Acc:  32.23%
Gap (Overfitting): -5.79%
Mejor Test Acc hasta ahora: 32.23% (época 8)
Épocas sin mejora: 0/15
Learning Rate actual: 1.00e-04
Tiempo de época: 163.11s
================================================================================

Epoch [9/150], Step [50/354], Loss: 2.2392, Acc: 26.69%
Epoch [9/150], Step [50/354], Loss: 2.2392, Acc: 26.69%
Epoch [9/150], Step [100/354], Loss: 2.5799, Acc: 27.50%
Epoch [9/150], Step [100/354], Loss: 2.5799, Acc: 27.50%
Epoch [9/150], Step [150/354], Loss: 2.2320, Acc: 27.19%
Epoch [9/150], Step [150/354], Loss: 2.2320, Acc: 27.19%
Epoch [9/150], Step [200/354], Loss: 2.4086, Acc: 27.45%
Epoch [9/150], Step [200/354], Loss: 2.4086, Acc: 27.45%
Epoch [9/150], Step [250/354], Loss: 1.9744, Acc: 27.86%
Epoch [9/150], Step [250/354], Loss: 1.9744, Acc: 27.86%
Epoch [9/150], Step [300/354], Loss: 2.1579, Acc: 27.86%
Epoch [9/150], Step [300/354], Loss: 2.1579, Acc: 27.86%
Epoch [9/150], Step [350/354], Loss: 2.1601, Acc: 27.91%
Epoch [9/150], Step [350/354], Loss: 2.1601, Acc: 27.91%
✓ Nuevo mejor modelo guardado: Test Acc = 33.18% (época 9)

================================================================================
Época [9/150] Completada
================================================================================
Train Loss: 2.3538 | Train Acc: 27.96%
Test Loss:  2.2668 | Test Acc:  33.18%
Gap (Overfitting): -5.22%
Mejor Test Acc hasta ahora: 33.18% (época 9)
Épocas sin mejora: 0/15
Learning Rate actual: 1.00e-04
Tiempo de época: 163.09s
================================================================================

✓ Nuevo mejor modelo guardado: Test Acc = 33.18% (época 9)

================================================================================
Época [9/150] Completada
================================================================================
Train Loss: 2.3538 | Train Acc: 27.96%
Test Loss:  2.2668 | Test Acc:  33.18%
Gap (Overfitting): -5.22%
Mejor Test Acc hasta ahora: 33.18% (época 9)
Épocas sin mejora: 0/15
Learning Rate actual: 1.00e-04
Tiempo de época: 163.09s
================================================================================

Epoch [10/150], Step [50/354], Loss: 2.1794, Acc: 28.88%
Epoch [10/150], Step [50/354], Loss: 2.1794, Acc: 28.88%
Epoch [10/150], Step [100/354], Loss: 2.5193, Acc: 29.12%
Epoch [10/150], Step [100/354], Loss: 2.5193, Acc: 29.12%
Epoch [10/150], Step [150/354], Loss: 2.3382, Acc: 29.88%
Epoch [10/150], Step [150/354], Loss: 2.3382, Acc: 29.88%
Epoch [10/150], Step [200/354], Loss: 1.9336, Acc: 29.89%
Epoch [10/150], Step [200/354], Loss: 1.9336, Acc: 29.89%
Epoch [10/150], Step [250/354], Loss: 2.4559, Acc: 29.96%
Epoch [10/150], Step [250/354], Loss: 2.4559, Acc: 29.96%
Epoch [10/150], Step [300/354], Loss: 2.3300, Acc: 29.69%
Epoch [10/150], Step [300/354], Loss: 2.3300, Acc: 29.69%
Epoch [10/150], Step [350/354], Loss: 2.2124, Acc: 29.62%
Epoch [10/150], Step [350/354], Loss: 2.2124, Acc: 29.62%
✓ Nuevo mejor modelo guardado: Test Acc = 38.37% (época 10)

================================================================================
Época [10/150] Completada
================================================================================
Train Loss: 2.2993 | Train Acc: 29.64%
Test Loss:  2.0770 | Test Acc:  38.37%
Gap (Overfitting): -8.73%
Mejor Test Acc hasta ahora: 38.37% (época 10)
Épocas sin mejora: 0/15
Learning Rate actual: 1.00e-04
Tiempo de época: 162.65s
================================================================================

✓ Nuevo mejor modelo guardado: Test Acc = 38.37% (época 10)

================================================================================
Época [10/150] Completada
================================================================================
Train Loss: 2.2993 | Train Acc: 29.64%
Test Loss:  2.0770 | Test Acc:  38.37%
Gap (Overfitting): -8.73%
Mejor Test Acc hasta ahora: 38.37% (época 10)
Épocas sin mejora: 0/15
Learning Rate actual: 1.00e-04
Tiempo de época: 162.65s
================================================================================

Epoch [11/150], Step [50/354], Loss: 2.2064, Acc: 31.50%
Epoch [11/150], Step [50/354], Loss: 2.2064, Acc: 31.50%
Epoch [11/150], Step [100/354], Loss: 2.3772, Acc: 31.50%
Epoch [11/150], Step [100/354], Loss: 2.3772, Acc: 31.50%
Epoch [11/150], Step [150/354], Loss: 1.9354, Acc: 30.85%
Epoch [11/150], Step [150/354], Loss: 1.9354, Acc: 30.85%
Epoch [11/150], Step [200/354], Loss: 2.0468, Acc: 31.47%
Epoch [11/150], Step [200/354], Loss: 2.0468, Acc: 31.47%
Epoch [11/150], Step [250/354], Loss: 1.9988, Acc: 31.84%
Epoch [11/150], Step [250/354], Loss: 1.9988, Acc: 31.84%
Epoch [11/150], Step [300/354], Loss: 2.0344, Acc: 31.90%
Epoch [11/150], Step [300/354], Loss: 2.0344, Acc: 31.90%
Epoch [11/150], Step [350/354], Loss: 2.6074, Acc: 31.91%
Epoch [11/150], Step [350/354], Loss: 2.6074, Acc: 31.91%

================================================================================
Época [11/150] Completada
================================================================================
Train Loss: 2.2476 | Train Acc: 31.97%
Test Loss:  2.1489 | Test Acc:  35.05%
Gap (Overfitting): -3.08%
Mejor Test Acc hasta ahora: 38.37% (época 10)
Épocas sin mejora: 1/15
Learning Rate actual: 1.00e-04
Tiempo de época: 161.49s
================================================================================


================================================================================
Época [11/150] Completada
================================================================================
Train Loss: 2.2476 | Train Acc: 31.97%
Test Loss:  2.1489 | Test Acc:  35.05%
Gap (Overfitting): -3.08%
Mejor Test Acc hasta ahora: 38.37% (época 10)
Épocas sin mejora: 1/15
Learning Rate actual: 1.00e-04
Tiempo de época: 161.49s
================================================================================

Epoch [12/150], Step [50/354], Loss: 2.4581, Acc: 31.62%
Epoch [12/150], Step [50/354], Loss: 2.4581, Acc: 31.62%
Epoch [12/150], Step [100/354], Loss: 1.7789, Acc: 32.44%
Epoch [12/150], Step [100/354], Loss: 1.7789, Acc: 32.44%
Epoch [12/150], Step [150/354], Loss: 2.1697, Acc: 33.58%
Epoch [12/150], Step [150/354], Loss: 2.1697, Acc: 33.58%
Epoch [12/150], Step [200/354], Loss: 2.4291, Acc: 33.73%
Epoch [12/150], Step [200/354], Loss: 2.4291, Acc: 33.73%
Epoch [12/150], Step [250/354], Loss: 1.8540, Acc: 34.10%
Epoch [12/150], Step [250/354], Loss: 1.8540, Acc: 34.10%
Epoch [12/150], Step [300/354], Loss: 2.0854, Acc: 33.79%
Epoch [12/150], Step [300/354], Loss: 2.0854, Acc: 33.79%
Epoch [12/150], Step [350/354], Loss: 2.1221, Acc: 33.71%
Epoch [12/150], Step [350/354], Loss: 2.1221, Acc: 33.71%
✓ Nuevo mejor modelo guardado: Test Acc = 41.38% (época 12)

================================================================================
Época [12/150] Completada
================================================================================
Train Loss: 2.2050 | Train Acc: 33.72%
Test Loss:  1.9708 | Test Acc:  41.38%
Gap (Overfitting): -7.66%
Mejor Test Acc hasta ahora: 41.38% (época 12)
Épocas sin mejora: 0/15
Learning Rate actual: 1.00e-04
Tiempo de época: 163.02s
================================================================================

✓ Nuevo mejor modelo guardado: Test Acc = 41.38% (época 12)

================================================================================
Época [12/150] Completada
================================================================================
Train Loss: 2.2050 | Train Acc: 33.72%
Test Loss:  1.9708 | Test Acc:  41.38%
Gap (Overfitting): -7.66%
Mejor Test Acc hasta ahora: 41.38% (época 12)
Épocas sin mejora: 0/15
Learning Rate actual: 1.00e-04
Tiempo de época: 163.02s
================================================================================

Epoch [13/150], Step [50/354], Loss: 2.3862, Acc: 34.12%
Epoch [13/150], Step [50/354], Loss: 2.3862, Acc: 34.12%
Epoch [13/150], Step [100/354], Loss: 2.1476, Acc: 33.44%
Epoch [13/150], Step [100/354], Loss: 2.1476, Acc: 33.44%
Epoch [13/150], Step [150/354], Loss: 2.2561, Acc: 34.77%
Epoch [13/150], Step [150/354], Loss: 2.2561, Acc: 34.77%
Epoch [13/150], Step [200/354], Loss: 2.1870, Acc: 35.05%
Epoch [13/150], Step [200/354], Loss: 2.1870, Acc: 35.05%
Epoch [13/150], Step [250/354], Loss: 2.0924, Acc: 35.21%
Epoch [13/150], Step [250/354], Loss: 2.0924, Acc: 35.21%
Epoch [13/150], Step [300/354], Loss: 2.1290, Acc: 35.16%
Epoch [13/150], Step [300/354], Loss: 2.1290, Acc: 35.16%
Epoch [13/150], Step [350/354], Loss: 2.3938, Acc: 34.97%
Epoch [13/150], Step [350/354], Loss: 2.3938, Acc: 34.97%
✓ Nuevo mejor modelo guardado: Test Acc = 42.16% (época 13)

================================================================================
Época [13/150] Completada
================================================================================
Train Loss: 2.1606 | Train Acc: 35.01%
Test Loss:  1.9100 | Test Acc:  42.16%
Gap (Overfitting): -7.14%
Mejor Test Acc hasta ahora: 42.16% (época 13)
Épocas sin mejora: 0/15
Learning Rate actual: 1.00e-04
Tiempo de época: 163.06s
================================================================================

✓ Nuevo mejor modelo guardado: Test Acc = 42.16% (época 13)

================================================================================
Época [13/150] Completada
================================================================================
Train Loss: 2.1606 | Train Acc: 35.01%
Test Loss:  1.9100 | Test Acc:  42.16%
Gap (Overfitting): -7.14%
Mejor Test Acc hasta ahora: 42.16% (época 13)
Épocas sin mejora: 0/15
Learning Rate actual: 1.00e-04
Tiempo de época: 163.06s
================================================================================

Epoch [14/150], Step [50/354], Loss: 2.2824, Acc: 34.81%
Epoch [14/150], Step [50/354], Loss: 2.2824, Acc: 34.81%
Epoch [14/150], Step [100/354], Loss: 2.5152, Acc: 35.00%
Epoch [14/150], Step [100/354], Loss: 2.5152, Acc: 35.00%
Epoch [14/150], Step [150/354], Loss: 1.9544, Acc: 35.12%
Epoch [14/150], Step [150/354], Loss: 1.9544, Acc: 35.12%
Epoch [14/150], Step [200/354], Loss: 2.1840, Acc: 35.42%
Epoch [14/150], Step [200/354], Loss: 2.1840, Acc: 35.42%
Epoch [14/150], Step [250/354], Loss: 1.9914, Acc: 35.59%
Epoch [14/150], Step [250/354], Loss: 1.9914, Acc: 35.59%
Epoch [14/150], Step [300/354], Loss: 1.9922, Acc: 35.69%
Epoch [14/150], Step [300/354], Loss: 1.9922, Acc: 35.69%
Epoch [14/150], Step [350/354], Loss: 2.1603, Acc: 35.82%
Epoch [14/150], Step [350/354], Loss: 2.1603, Acc: 35.82%

================================================================================
Época [14/150] Completada
================================================================================
Train Loss: 2.1171 | Train Acc: 35.77%
Test Loss:  1.9962 | Test Acc:  40.46%
Gap (Overfitting): -4.69%
Mejor Test Acc hasta ahora: 42.16% (época 13)
Épocas sin mejora: 1/15
Learning Rate actual: 1.00e-04
Tiempo de época: 165.40s
================================================================================


================================================================================
Época [14/150] Completada
================================================================================
Train Loss: 2.1171 | Train Acc: 35.77%
Test Loss:  1.9962 | Test Acc:  40.46%
Gap (Overfitting): -4.69%
Mejor Test Acc hasta ahora: 42.16% (época 13)
Épocas sin mejora: 1/15
Learning Rate actual: 1.00e-04
Tiempo de época: 165.40s
================================================================================

Epoch [15/150], Step [50/354], Loss: 1.9014, Acc: 36.81%
Epoch [15/150], Step [50/354], Loss: 1.9014, Acc: 36.81%
Epoch [15/150], Step [100/354], Loss: 2.2301, Acc: 37.72%
Epoch [15/150], Step [100/354], Loss: 2.2301, Acc: 37.72%
Epoch [15/150], Step [150/354], Loss: 2.4134, Acc: 37.48%
Epoch [15/150], Step [150/354], Loss: 2.4134, Acc: 37.48%
Epoch [15/150], Step [200/354], Loss: 1.6211, Acc: 37.42%
Epoch [15/150], Step [200/354], Loss: 1.6211, Acc: 37.42%
Epoch [15/150], Step [250/354], Loss: 2.2538, Acc: 37.15%
Epoch [15/150], Step [250/354], Loss: 2.2538, Acc: 37.15%
Epoch [15/150], Step [300/354], Loss: 2.1120, Acc: 37.15%
Epoch [15/150], Step [300/354], Loss: 2.1120, Acc: 37.15%
Epoch [15/150], Step [350/354], Loss: 2.0685, Acc: 37.10%
Epoch [15/150], Step [350/354], Loss: 2.0685, Acc: 37.10%

================================================================================
Época [15/150] Completada
================================================================================
Train Loss: 2.0756 | Train Acc: 37.09%
Test Loss:  1.9282 | Test Acc:  42.12%
Gap (Overfitting): -5.03%
Mejor Test Acc hasta ahora: 42.16% (época 13)
Épocas sin mejora: 2/15
Learning Rate actual: 1.00e-04
Tiempo de época: 163.86s
================================================================================


================================================================================
Época [15/150] Completada
================================================================================
Train Loss: 2.0756 | Train Acc: 37.09%
Test Loss:  1.9282 | Test Acc:  42.12%
Gap (Overfitting): -5.03%
Mejor Test Acc hasta ahora: 42.16% (época 13)
Épocas sin mejora: 2/15
Learning Rate actual: 1.00e-04
Tiempo de época: 163.86s
================================================================================

Epoch [16/150], Step [50/354], Loss: 1.6515, Acc: 37.94%
Epoch [16/150], Step [50/354], Loss: 1.6515, Acc: 37.94%
Epoch [16/150], Step [100/354], Loss: 2.2565, Acc: 38.81%
Epoch [16/150], Step [100/354], Loss: 2.2565, Acc: 38.81%
Epoch [16/150], Step [150/354], Loss: 1.7101, Acc: 37.44%
Epoch [16/150], Step [150/354], Loss: 1.7101, Acc: 37.44%
Epoch [16/150], Step [200/354], Loss: 1.7255, Acc: 37.25%
Epoch [16/150], Step [200/354], Loss: 1.7255, Acc: 37.25%
Epoch [16/150], Step [250/354], Loss: 1.8380, Acc: 38.09%
Epoch [16/150], Step [250/354], Loss: 1.8380, Acc: 38.09%
Epoch [16/150], Step [300/354], Loss: 2.2806, Acc: 37.86%
Epoch [16/150], Step [300/354], Loss: 2.2806, Acc: 37.86%
Epoch [16/150], Step [350/354], Loss: 2.3613, Acc: 37.96%
Epoch [16/150], Step [350/354], Loss: 2.3613, Acc: 37.96%

================================================================================
Época [16/150] Completada
================================================================================
Train Loss: 2.0482 | Train Acc: 38.02%
Test Loss:  1.9493 | Test Acc:  41.77%
Gap (Overfitting): -3.74%
Mejor Test Acc hasta ahora: 42.16% (época 13)
Épocas sin mejora: 3/15
Learning Rate actual: 1.00e-04
Tiempo de época: 174.61s
================================================================================


================================================================================
Época [16/150] Completada
================================================================================
Train Loss: 2.0482 | Train Acc: 38.02%
Test Loss:  1.9493 | Test Acc:  41.77%
Gap (Overfitting): -3.74%
Mejor Test Acc hasta ahora: 42.16% (época 13)
Épocas sin mejora: 3/15
Learning Rate actual: 1.00e-04
Tiempo de época: 174.61s
================================================================================

Epoch [17/150], Step [50/354], Loss: 2.0187, Acc: 36.81%
Epoch [17/150], Step [50/354], Loss: 2.0187, Acc: 36.81%
Epoch [17/150], Step [100/354], Loss: 1.9028, Acc: 37.84%
Epoch [17/150], Step [100/354], Loss: 1.9028, Acc: 37.84%
Epoch [17/150], Step [150/354], Loss: 1.9461, Acc: 38.15%
Epoch [17/150], Step [150/354], Loss: 1.9461, Acc: 38.15%
Epoch [17/150], Step [200/354], Loss: 1.8225, Acc: 38.50%
Epoch [17/150], Step [200/354], Loss: 1.8225, Acc: 38.50%
Epoch [17/150], Step [250/354], Loss: 1.7852, Acc: 39.11%
Epoch [17/150], Step [250/354], Loss: 1.7852, Acc: 39.11%
Epoch [17/150], Step [300/354], Loss: 1.6176, Acc: 39.03%
Epoch [17/150], Step [300/354], Loss: 1.6176, Acc: 39.03%
Epoch [17/150], Step [350/354], Loss: 2.6208, Acc: 38.79%
Epoch [17/150], Step [350/354], Loss: 2.6208, Acc: 38.79%
✓ Nuevo mejor modelo guardado: Test Acc = 44.17% (época 17)

================================================================================
Época [17/150] Completada
================================================================================
Train Loss: 2.0264 | Train Acc: 38.68%
Test Loss:  1.8358 | Test Acc:  44.17%
Gap (Overfitting): -5.49%
Mejor Test Acc hasta ahora: 44.17% (época 17)
Épocas sin mejora: 0/15
Learning Rate actual: 1.00e-04
Tiempo de época: 163.18s
================================================================================

✓ Nuevo mejor modelo guardado: Test Acc = 44.17% (época 17)

================================================================================
Época [17/150] Completada
================================================================================
Train Loss: 2.0264 | Train Acc: 38.68%
Test Loss:  1.8358 | Test Acc:  44.17%
Gap (Overfitting): -5.49%
Mejor Test Acc hasta ahora: 44.17% (época 17)
Épocas sin mejora: 0/15
Learning Rate actual: 1.00e-04
Tiempo de época: 163.18s
================================================================================

Epoch [18/150], Step [50/354], Loss: 2.1736, Acc: 40.12%
Epoch [18/150], Step [50/354], Loss: 2.1736, Acc: 40.12%
Epoch [18/150], Step [100/354], Loss: 1.9028, Acc: 38.72%
Epoch [18/150], Step [100/354], Loss: 1.9028, Acc: 38.72%
Epoch [18/150], Step [150/354], Loss: 2.4080, Acc: 39.17%
Epoch [18/150], Step [150/354], Loss: 2.4080, Acc: 39.17%
Epoch [18/150], Step [200/354], Loss: 1.6190, Acc: 39.34%
Epoch [18/150], Step [200/354], Loss: 1.6190, Acc: 39.34%
Epoch [18/150], Step [250/354], Loss: 1.8936, Acc: 39.29%
Epoch [18/150], Step [250/354], Loss: 1.8936, Acc: 39.29%
Epoch [18/150], Step [300/354], Loss: 1.8995, Acc: 39.21%
Epoch [18/150], Step [300/354], Loss: 1.8995, Acc: 39.21%
Epoch [18/150], Step [350/354], Loss: 2.3057, Acc: 39.31%
Epoch [18/150], Step [350/354], Loss: 2.3057, Acc: 39.31%
✓ Nuevo mejor modelo guardado: Test Acc = 45.12% (época 18)

================================================================================
Época [18/150] Completada
================================================================================
Train Loss: 1.9979 | Train Acc: 39.41%
Test Loss:  1.7718 | Test Acc:  45.12%
Gap (Overfitting): -5.71%
Mejor Test Acc hasta ahora: 45.12% (época 18)
Épocas sin mejora: 0/15
Learning Rate actual: 1.00e-04
Tiempo de época: 173.71s
================================================================================

✓ Nuevo mejor modelo guardado: Test Acc = 45.12% (época 18)

================================================================================
Época [18/150] Completada
================================================================================
Train Loss: 1.9979 | Train Acc: 39.41%
Test Loss:  1.7718 | Test Acc:  45.12%
Gap (Overfitting): -5.71%
Mejor Test Acc hasta ahora: 45.12% (época 18)
Épocas sin mejora: 0/15
Learning Rate actual: 1.00e-04
Tiempo de época: 173.71s
================================================================================

Epoch [19/150], Step [50/354], Loss: 1.5215, Acc: 38.50%
Epoch [19/150], Step [50/354], Loss: 1.5215, Acc: 38.50%
Epoch [19/150], Step [100/354], Loss: 1.6587, Acc: 40.22%
Epoch [19/150], Step [100/354], Loss: 1.6587, Acc: 40.22%
Epoch [19/150], Step [150/354], Loss: 1.6782, Acc: 40.08%
Epoch [19/150], Step [150/354], Loss: 1.6782, Acc: 40.08%
Epoch [19/150], Step [200/354], Loss: 1.7480, Acc: 39.47%
Epoch [19/150], Step [200/354], Loss: 1.7480, Acc: 39.47%
Epoch [19/150], Step [250/354], Loss: 2.0910, Acc: 39.58%
Epoch [19/150], Step [250/354], Loss: 2.0910, Acc: 39.58%
Epoch [19/150], Step [300/354], Loss: 2.1902, Acc: 40.01%
Epoch [19/150], Step [300/354], Loss: 2.1902, Acc: 40.01%
Epoch [19/150], Step [350/354], Loss: 1.9895, Acc: 40.25%
Epoch [19/150], Step [350/354], Loss: 1.9895, Acc: 40.25%
✓ Nuevo mejor modelo guardado: Test Acc = 45.41% (época 19)

================================================================================
Época [19/150] Completada
================================================================================
Train Loss: 1.9746 | Train Acc: 40.23%
Test Loss:  1.8158 | Test Acc:  45.41%
Gap (Overfitting): -5.17%
Mejor Test Acc hasta ahora: 45.41% (época 19)
Épocas sin mejora: 0/15
Learning Rate actual: 1.00e-04
Tiempo de época: 200.13s
================================================================================

✓ Nuevo mejor modelo guardado: Test Acc = 45.41% (época 19)

================================================================================
Época [19/150] Completada
================================================================================
Train Loss: 1.9746 | Train Acc: 40.23%
Test Loss:  1.8158 | Test Acc:  45.41%
Gap (Overfitting): -5.17%
Mejor Test Acc hasta ahora: 45.41% (época 19)
Épocas sin mejora: 0/15
Learning Rate actual: 1.00e-04
Tiempo de época: 200.13s
================================================================================

Epoch [20/150], Step [50/354], Loss: 1.8821, Acc: 41.62%
Epoch [20/150], Step [50/354], Loss: 1.8821, Acc: 41.62%
Epoch [20/150], Step [100/354], Loss: 1.4340, Acc: 40.69%
Epoch [20/150], Step [100/354], Loss: 1.4340, Acc: 40.69%
Epoch [20/150], Step [150/354], Loss: 1.8934, Acc: 40.19%
Epoch [20/150], Step [150/354], Loss: 1.8934, Acc: 40.19%
Epoch [20/150], Step [200/354], Loss: 1.4879, Acc: 40.39%
Epoch [20/150], Step [200/354], Loss: 1.4879, Acc: 40.39%
Epoch [20/150], Step [250/354], Loss: 1.8296, Acc: 40.16%
Epoch [20/150], Step [250/354], Loss: 1.8296, Acc: 40.16%
Epoch [20/150], Step [300/354], Loss: 2.0625, Acc: 40.10%
Epoch [20/150], Step [300/354], Loss: 2.0625, Acc: 40.10%
Epoch [20/150], Step [350/354], Loss: 2.2157, Acc: 40.49%
Epoch [20/150], Step [350/354], Loss: 2.2157, Acc: 40.49%
✓ Nuevo mejor modelo guardado: Test Acc = 46.75% (época 20)

================================================================================
Época [20/150] Completada
================================================================================
Train Loss: 1.9548 | Train Acc: 40.46%
Test Loss:  1.8039 | Test Acc:  46.75%
Gap (Overfitting): -6.29%
Mejor Test Acc hasta ahora: 46.75% (época 20)
Épocas sin mejora: 0/15
Learning Rate actual: 1.00e-04
Tiempo de época: 199.68s
================================================================================

✓ Nuevo mejor modelo guardado: Test Acc = 46.75% (época 20)

================================================================================
Época [20/150] Completada
================================================================================
Train Loss: 1.9548 | Train Acc: 40.46%
Test Loss:  1.8039 | Test Acc:  46.75%
Gap (Overfitting): -6.29%
Mejor Test Acc hasta ahora: 46.75% (época 20)
Épocas sin mejora: 0/15
Learning Rate actual: 1.00e-04
Tiempo de época: 199.68s
================================================================================

Epoch [21/150], Step [50/354], Loss: 2.0195, Acc: 43.25%
Epoch [21/150], Step [50/354], Loss: 2.0195, Acc: 43.25%
Epoch [21/150], Step [100/354], Loss: 1.5007, Acc: 42.53%
Epoch [21/150], Step [100/354], Loss: 1.5007, Acc: 42.53%
Epoch [21/150], Step [150/354], Loss: 1.6994, Acc: 42.29%
Epoch [21/150], Step [150/354], Loss: 1.6994, Acc: 42.29%
Epoch [21/150], Step [200/354], Loss: 2.0727, Acc: 41.48%
Epoch [21/150], Step [200/354], Loss: 2.0727, Acc: 41.48%
Epoch [21/150], Step [250/354], Loss: 1.6657, Acc: 41.59%
Epoch [21/150], Step [250/354], Loss: 1.6657, Acc: 41.59%
Epoch [21/150], Step [300/354], Loss: 1.9476, Acc: 41.49%
Epoch [21/150], Step [300/354], Loss: 1.9476, Acc: 41.49%
Epoch [21/150], Step [350/354], Loss: 1.8767, Acc: 41.88%
Epoch [21/150], Step [350/354], Loss: 1.8767, Acc: 41.88%

================================================================================
Época [21/150] Completada
================================================================================
Train Loss: 1.9290 | Train Acc: 41.92%
Test Loss:  1.8036 | Test Acc:  46.75%
Gap (Overfitting): -4.83%
Mejor Test Acc hasta ahora: 46.75% (época 20)
Épocas sin mejora: 1/15
Learning Rate actual: 1.00e-04
Tiempo de época: 174.62s
================================================================================


================================================================================
Época [21/150] Completada
================================================================================
Train Loss: 1.9290 | Train Acc: 41.92%
Test Loss:  1.8036 | Test Acc:  46.75%
Gap (Overfitting): -4.83%
Mejor Test Acc hasta ahora: 46.75% (época 20)
Épocas sin mejora: 1/15
Learning Rate actual: 1.00e-04
Tiempo de época: 174.62s
================================================================================

Epoch [22/150], Step [50/354], Loss: 1.9486, Acc: 42.12%
Epoch [22/150], Step [50/354], Loss: 1.9486, Acc: 42.12%
Epoch [22/150], Step [100/354], Loss: 1.2056, Acc: 42.69%
Epoch [22/150], Step [100/354], Loss: 1.2056, Acc: 42.69%
Epoch [22/150], Step [150/354], Loss: 2.2108, Acc: 42.25%
Epoch [22/150], Step [150/354], Loss: 2.2108, Acc: 42.25%
Epoch [22/150], Step [200/354], Loss: 2.0800, Acc: 43.12%
Epoch [22/150], Step [200/354], Loss: 2.0800, Acc: 43.12%
Epoch [22/150], Step [250/354], Loss: 2.0053, Acc: 43.01%
Epoch [22/150], Step [250/354], Loss: 2.0053, Acc: 43.01%
Epoch [22/150], Step [300/354], Loss: 1.8634, Acc: 42.77%
Epoch [22/150], Step [300/354], Loss: 1.8634, Acc: 42.77%
Epoch [22/150], Step [350/354], Loss: 2.2329, Acc: 42.65%
Epoch [22/150], Step [350/354], Loss: 2.2329, Acc: 42.65%
✓ Nuevo mejor modelo guardado: Test Acc = 47.60% (época 22)

================================================================================
Época [22/150] Completada
================================================================================
Train Loss: 1.9021 | Train Acc: 42.67%
Test Loss:  1.7002 | Test Acc:  47.60%
Gap (Overfitting): -4.93%
Mejor Test Acc hasta ahora: 47.60% (época 22)
Épocas sin mejora: 0/15
Learning Rate actual: 1.00e-04
Tiempo de época: 162.37s
================================================================================

✓ Nuevo mejor modelo guardado: Test Acc = 47.60% (época 22)

================================================================================
Época [22/150] Completada
================================================================================
Train Loss: 1.9021 | Train Acc: 42.67%
Test Loss:  1.7002 | Test Acc:  47.60%
Gap (Overfitting): -4.93%
Mejor Test Acc hasta ahora: 47.60% (época 22)
Épocas sin mejora: 0/15
Learning Rate actual: 1.00e-04
Tiempo de época: 162.37s
================================================================================

Epoch [23/150], Step [50/354], Loss: 1.9285, Acc: 41.00%
Epoch [23/150], Step [50/354], Loss: 1.9285, Acc: 41.00%
Epoch [23/150], Step [100/354], Loss: 1.7341, Acc: 42.19%
Epoch [23/150], Step [100/354], Loss: 1.7341, Acc: 42.19%
Epoch [23/150], Step [150/354], Loss: 1.6343, Acc: 41.85%
Epoch [23/150], Step [150/354], Loss: 1.6343, Acc: 41.85%
Epoch [23/150], Step [200/354], Loss: 1.9893, Acc: 42.39%
Epoch [23/150], Step [200/354], Loss: 1.9893, Acc: 42.39%
Epoch [23/150], Step [250/354], Loss: 2.0134, Acc: 42.40%
Epoch [23/150], Step [250/354], Loss: 2.0134, Acc: 42.40%
Epoch [23/150], Step [300/354], Loss: 2.1006, Acc: 42.74%
Epoch [23/150], Step [300/354], Loss: 2.1006, Acc: 42.74%
Epoch [23/150], Step [350/354], Loss: 1.7786, Acc: 42.58%
Epoch [23/150], Step [350/354], Loss: 1.7786, Acc: 42.58%

================================================================================
Época [23/150] Completada
================================================================================
Train Loss: 1.8966 | Train Acc: 42.65%
Test Loss:  1.7995 | Test Acc:  46.18%
Gap (Overfitting): -3.54%
Mejor Test Acc hasta ahora: 47.60% (época 22)
Épocas sin mejora: 1/15
Learning Rate actual: 1.00e-04
Tiempo de época: 169.96s
================================================================================


================================================================================
Época [23/150] Completada
================================================================================
Train Loss: 1.8966 | Train Acc: 42.65%
Test Loss:  1.7995 | Test Acc:  46.18%
Gap (Overfitting): -3.54%
Mejor Test Acc hasta ahora: 47.60% (época 22)
Épocas sin mejora: 1/15
Learning Rate actual: 1.00e-04
Tiempo de época: 169.96s
================================================================================

Epoch [24/150], Step [50/354], Loss: 1.5563, Acc: 45.81%
Epoch [24/150], Step [50/354], Loss: 1.5563, Acc: 45.81%
Epoch [24/150], Step [100/354], Loss: 1.8486, Acc: 44.78%
Epoch [24/150], Step [100/354], Loss: 1.8486, Acc: 44.78%
Epoch [24/150], Step [150/354], Loss: 1.8392, Acc: 43.73%
Epoch [24/150], Step [150/354], Loss: 1.8392, Acc: 43.73%
Epoch [24/150], Step [200/354], Loss: 1.8798, Acc: 43.33%
Epoch [24/150], Step [200/354], Loss: 1.8798, Acc: 43.33%
Epoch [24/150], Step [250/354], Loss: 1.6823, Acc: 43.41%
Epoch [24/150], Step [250/354], Loss: 1.6823, Acc: 43.41%
Epoch [24/150], Step [300/354], Loss: 1.9548, Acc: 43.53%
Epoch [24/150], Step [300/354], Loss: 1.9548, Acc: 43.53%
Epoch [24/150], Step [350/354], Loss: 2.0198, Acc: 43.57%
Epoch [24/150], Step [350/354], Loss: 2.0198, Acc: 43.57%
✓ Nuevo mejor modelo guardado: Test Acc = 48.69% (época 24)

================================================================================
Época [24/150] Completada
================================================================================
Train Loss: 1.8666 | Train Acc: 43.58%
Test Loss:  1.7083 | Test Acc:  48.69%
Gap (Overfitting): -5.11%
Mejor Test Acc hasta ahora: 48.69% (época 24)
Épocas sin mejora: 0/15
Learning Rate actual: 1.00e-04
Tiempo de época: 169.77s
================================================================================

✓ Nuevo mejor modelo guardado: Test Acc = 48.69% (época 24)

================================================================================
Época [24/150] Completada
================================================================================
Train Loss: 1.8666 | Train Acc: 43.58%
Test Loss:  1.7083 | Test Acc:  48.69%
Gap (Overfitting): -5.11%
Mejor Test Acc hasta ahora: 48.69% (época 24)
Épocas sin mejora: 0/15
Learning Rate actual: 1.00e-04
Tiempo de época: 169.77s
================================================================================

Epoch [25/150], Step [50/354], Loss: 2.2500, Acc: 42.62%
Epoch [25/150], Step [50/354], Loss: 2.2500, Acc: 42.62%
Epoch [25/150], Step [100/354], Loss: 1.6945, Acc: 42.84%
Epoch [25/150], Step [100/354], Loss: 1.6945, Acc: 42.84%
Epoch [25/150], Step [150/354], Loss: 2.3656, Acc: 42.90%
Epoch [25/150], Step [150/354], Loss: 2.3656, Acc: 42.90%
Epoch [25/150], Step [200/354], Loss: 1.9474, Acc: 42.62%
Epoch [25/150], Step [200/354], Loss: 1.9474, Acc: 42.62%
Epoch [25/150], Step [250/354], Loss: 1.5047, Acc: 43.38%
Epoch [25/150], Step [250/354], Loss: 1.5047, Acc: 43.38%
Epoch [25/150], Step [300/354], Loss: 1.6567, Acc: 43.74%
Epoch [25/150], Step [300/354], Loss: 1.6567, Acc: 43.74%
Epoch [25/150], Step [350/354], Loss: 1.6483, Acc: 44.03%
Epoch [25/150], Step [350/354], Loss: 1.6483, Acc: 44.03%
✓ Nuevo mejor modelo guardado: Test Acc = 51.27% (época 25)

================================================================================
Época [25/150] Completada
================================================================================
Train Loss: 1.8397 | Train Acc: 44.00%
Test Loss:  1.6505 | Test Acc:  51.27%
Gap (Overfitting): -7.28%
Mejor Test Acc hasta ahora: 51.27% (época 25)
Épocas sin mejora: 0/15
Learning Rate actual: 1.00e-04
Tiempo de época: 169.55s
================================================================================

✓ Nuevo mejor modelo guardado: Test Acc = 51.27% (época 25)

================================================================================
Época [25/150] Completada
================================================================================
Train Loss: 1.8397 | Train Acc: 44.00%
Test Loss:  1.6505 | Test Acc:  51.27%
Gap (Overfitting): -7.28%
Mejor Test Acc hasta ahora: 51.27% (época 25)
Épocas sin mejora: 0/15
Learning Rate actual: 1.00e-04
Tiempo de época: 169.55s
================================================================================

Epoch [26/150], Step [50/354], Loss: 1.5043, Acc: 43.31%
Epoch [26/150], Step [50/354], Loss: 1.5043, Acc: 43.31%
Epoch [26/150], Step [100/354], Loss: 1.8769, Acc: 43.34%
Epoch [26/150], Step [100/354], Loss: 1.8769, Acc: 43.34%
Epoch [26/150], Step [150/354], Loss: 1.4247, Acc: 43.75%
Epoch [26/150], Step [150/354], Loss: 1.4247, Acc: 43.75%
Epoch [26/150], Step [200/354], Loss: 1.9267, Acc: 43.81%
Epoch [26/150], Step [200/354], Loss: 1.9267, Acc: 43.81%
Epoch [26/150], Step [250/354], Loss: 1.9804, Acc: 44.46%
Epoch [26/150], Step [250/354], Loss: 1.9804, Acc: 44.46%
Epoch [26/150], Step [300/354], Loss: 1.9152, Acc: 44.70%
Epoch [26/150], Step [300/354], Loss: 1.9152, Acc: 44.70%
Epoch [26/150], Step [350/354], Loss: 2.0408, Acc: 44.64%
Epoch [26/150], Step [350/354], Loss: 2.0408, Acc: 44.64%

================================================================================
Época [26/150] Completada
================================================================================
Train Loss: 1.8347 | Train Acc: 44.62%
Test Loss:  1.7016 | Test Acc:  49.75%
Gap (Overfitting): -5.14%
Mejor Test Acc hasta ahora: 51.27% (época 25)
Épocas sin mejora: 1/15
Learning Rate actual: 1.00e-04
Tiempo de época: 170.61s
================================================================================


================================================================================
Época [26/150] Completada
================================================================================
Train Loss: 1.8347 | Train Acc: 44.62%
Test Loss:  1.7016 | Test Acc:  49.75%
Gap (Overfitting): -5.14%
Mejor Test Acc hasta ahora: 51.27% (época 25)
Épocas sin mejora: 1/15
Learning Rate actual: 1.00e-04
Tiempo de época: 170.61s
================================================================================

Epoch [27/150], Step [50/354], Loss: 1.7757, Acc: 47.69%
Epoch [27/150], Step [50/354], Loss: 1.7757, Acc: 47.69%
Epoch [27/150], Step [100/354], Loss: 2.3463, Acc: 46.84%
Epoch [27/150], Step [100/354], Loss: 2.3463, Acc: 46.84%
Epoch [27/150], Step [150/354], Loss: 2.0909, Acc: 45.52%
Epoch [27/150], Step [150/354], Loss: 2.0909, Acc: 45.52%
Epoch [27/150], Step [200/354], Loss: 2.0766, Acc: 45.23%
Epoch [27/150], Step [200/354], Loss: 2.0766, Acc: 45.23%
Epoch [27/150], Step [250/354], Loss: 1.8376, Acc: 45.23%
Epoch [27/150], Step [250/354], Loss: 1.8376, Acc: 45.23%
Epoch [27/150], Step [300/354], Loss: 1.6593, Acc: 44.89%
Epoch [27/150], Step [300/354], Loss: 1.6593, Acc: 44.89%
Epoch [27/150], Step [350/354], Loss: 2.0496, Acc: 44.62%
Epoch [27/150], Step [350/354], Loss: 2.0496, Acc: 44.62%

================================================================================
Época [27/150] Completada
================================================================================
Train Loss: 1.8220 | Train Acc: 44.62%
Test Loss:  1.6986 | Test Acc:  49.61%
Gap (Overfitting): -4.99%
Mejor Test Acc hasta ahora: 51.27% (época 25)
Épocas sin mejora: 2/15
Learning Rate actual: 1.00e-04
Tiempo de época: 164.29s
================================================================================


================================================================================
Época [27/150] Completada
================================================================================
Train Loss: 1.8220 | Train Acc: 44.62%
Test Loss:  1.6986 | Test Acc:  49.61%
Gap (Overfitting): -4.99%
Mejor Test Acc hasta ahora: 51.27% (época 25)
Épocas sin mejora: 2/15
Learning Rate actual: 1.00e-04
Tiempo de época: 164.29s
================================================================================

Epoch [28/150], Step [50/354], Loss: 2.1689, Acc: 46.56%
Epoch [28/150], Step [50/354], Loss: 2.1689, Acc: 46.56%
Epoch [28/150], Step [100/354], Loss: 1.4561, Acc: 45.84%
Epoch [28/150], Step [100/354], Loss: 1.4561, Acc: 45.84%
Epoch [28/150], Step [150/354], Loss: 1.5359, Acc: 45.69%
Epoch [28/150], Step [150/354], Loss: 1.5359, Acc: 45.69%
Epoch [28/150], Step [200/354], Loss: 1.8218, Acc: 45.80%
Epoch [28/150], Step [200/354], Loss: 1.8218, Acc: 45.80%
Epoch [28/150], Step [250/354], Loss: 1.9633, Acc: 46.33%
Epoch [28/150], Step [250/354], Loss: 1.9633, Acc: 46.33%
Epoch [28/150], Step [300/354], Loss: 1.8303, Acc: 46.20%
Epoch [28/150], Step [300/354], Loss: 1.8303, Acc: 46.20%
Epoch [28/150], Step [350/354], Loss: 1.5749, Acc: 45.78%
Epoch [28/150], Step [350/354], Loss: 1.5749, Acc: 45.78%
✓ Nuevo mejor modelo guardado: Test Acc = 51.63% (época 28)

================================================================================
Época [28/150] Completada
================================================================================
Train Loss: 1.7910 | Train Acc: 45.80%
Test Loss:  1.6487 | Test Acc:  51.63%
Gap (Overfitting): -5.83%
Mejor Test Acc hasta ahora: 51.63% (época 28)
Épocas sin mejora: 0/15
Learning Rate actual: 1.00e-04
Tiempo de época: 160.59s
================================================================================

✓ Nuevo mejor modelo guardado: Test Acc = 51.63% (época 28)

================================================================================
Época [28/150] Completada
================================================================================
Train Loss: 1.7910 | Train Acc: 45.80%
Test Loss:  1.6487 | Test Acc:  51.63%
Gap (Overfitting): -5.83%
Mejor Test Acc hasta ahora: 51.63% (época 28)
Épocas sin mejora: 0/15
Learning Rate actual: 1.00e-04
Tiempo de época: 160.59s
================================================================================

Epoch [29/150], Step [50/354], Loss: 1.7469, Acc: 43.88%
Epoch [29/150], Step [50/354], Loss: 1.7469, Acc: 43.88%
Epoch [29/150], Step [100/354], Loss: 1.7196, Acc: 43.78%
Epoch [29/150], Step [100/354], Loss: 1.7196, Acc: 43.78%
Epoch [29/150], Step [150/354], Loss: 2.0780, Acc: 44.46%
Epoch [29/150], Step [150/354], Loss: 2.0780, Acc: 44.46%
Epoch [29/150], Step [200/354], Loss: 1.5119, Acc: 44.98%
Epoch [29/150], Step [200/354], Loss: 1.5119, Acc: 44.98%
Epoch [29/150], Step [250/354], Loss: 1.3938, Acc: 45.01%
Epoch [29/150], Step [250/354], Loss: 1.3938, Acc: 45.01%
Epoch [29/150], Step [300/354], Loss: 1.7449, Acc: 45.32%
Epoch [29/150], Step [300/354], Loss: 1.7449, Acc: 45.32%
Epoch [29/150], Step [350/354], Loss: 1.7866, Acc: 45.47%
Epoch [29/150], Step [350/354], Loss: 1.7866, Acc: 45.47%

================================================================================
Época [29/150] Completada
================================================================================
Train Loss: 1.8036 | Train Acc: 45.37%
Test Loss:  1.7255 | Test Acc:  48.66%
Gap (Overfitting): -3.29%
Mejor Test Acc hasta ahora: 51.63% (época 28)
Épocas sin mejora: 1/15
Learning Rate actual: 1.00e-04
Tiempo de época: 255.19s
================================================================================


================================================================================
Época [29/150] Completada
================================================================================
Train Loss: 1.8036 | Train Acc: 45.37%
Test Loss:  1.7255 | Test Acc:  48.66%
Gap (Overfitting): -3.29%
Mejor Test Acc hasta ahora: 51.63% (época 28)
Épocas sin mejora: 1/15
Learning Rate actual: 1.00e-04
Tiempo de época: 255.19s
================================================================================

Epoch [30/150], Step [50/354], Loss: 1.6619, Acc: 48.31%
Epoch [30/150], Step [50/354], Loss: 1.6619, Acc: 48.31%
Epoch [30/150], Step [100/354], Loss: 1.9805, Acc: 47.38%
Epoch [30/150], Step [100/354], Loss: 1.9805, Acc: 47.38%
Epoch [30/150], Step [150/354], Loss: 2.0169, Acc: 47.58%
Epoch [30/150], Step [150/354], Loss: 2.0169, Acc: 47.58%
Epoch [30/150], Step [200/354], Loss: 1.5260, Acc: 47.47%
Epoch [30/150], Step [200/354], Loss: 1.5260, Acc: 47.47%
Epoch [30/150], Step [250/354], Loss: 1.5844, Acc: 47.25%
Epoch [30/150], Step [250/354], Loss: 1.5844, Acc: 47.25%
Epoch [30/150], Step [300/354], Loss: 1.6552, Acc: 47.30%
Epoch [30/150], Step [300/354], Loss: 1.6552, Acc: 47.30%
Epoch [30/150], Step [350/354], Loss: 1.4804, Acc: 47.06%
Epoch [30/150], Step [350/354], Loss: 1.4804, Acc: 47.06%
✓ Nuevo mejor modelo guardado: Test Acc = 52.51% (época 30)

================================================================================
Época [30/150] Completada
================================================================================
Train Loss: 1.7431 | Train Acc: 46.97%
Test Loss:  1.6120 | Test Acc:  52.51%
Gap (Overfitting): -5.54%
Mejor Test Acc hasta ahora: 52.51% (época 30)
Épocas sin mejora: 0/15
Learning Rate actual: 1.00e-04
Tiempo de época: 256.96s
================================================================================

✓ Nuevo mejor modelo guardado: Test Acc = 52.51% (época 30)

================================================================================
Época [30/150] Completada
================================================================================
Train Loss: 1.7431 | Train Acc: 46.97%
Test Loss:  1.6120 | Test Acc:  52.51%
Gap (Overfitting): -5.54%
Mejor Test Acc hasta ahora: 52.51% (época 30)
Épocas sin mejora: 0/15
Learning Rate actual: 1.00e-04
Tiempo de época: 256.96s
================================================================================

Epoch [31/150], Step [50/354], Loss: 2.0626, Acc: 48.00%
Epoch [31/150], Step [50/354], Loss: 2.0626, Acc: 48.00%
Epoch [31/150], Step [100/354], Loss: 1.3287, Acc: 47.25%
Epoch [31/150], Step [100/354], Loss: 1.3287, Acc: 47.25%
Epoch [31/150], Step [150/354], Loss: 2.1454, Acc: 47.52%
Epoch [31/150], Step [150/354], Loss: 2.1454, Acc: 47.52%
Epoch [31/150], Step [200/354], Loss: 2.0269, Acc: 47.16%
Epoch [31/150], Step [200/354], Loss: 2.0269, Acc: 47.16%
Epoch [31/150], Step [250/354], Loss: 2.3072, Acc: 47.19%
Epoch [31/150], Step [250/354], Loss: 2.3072, Acc: 47.19%
Epoch [31/150], Step [300/354], Loss: 1.7822, Acc: 46.96%
Epoch [31/150], Step [300/354], Loss: 1.7822, Acc: 46.96%
Epoch [31/150], Step [350/354], Loss: 1.6102, Acc: 47.28%
Epoch [31/150], Step [350/354], Loss: 1.6102, Acc: 47.28%
✓ Nuevo mejor modelo guardado: Test Acc = 52.72% (época 31)

================================================================================
Época [31/150] Completada
================================================================================
Train Loss: 1.7422 | Train Acc: 47.26%
Test Loss:  1.5928 | Test Acc:  52.72%
Gap (Overfitting): -5.46%
Mejor Test Acc hasta ahora: 52.72% (época 31)
Épocas sin mejora: 0/15
Learning Rate actual: 1.00e-04
Tiempo de época: 237.73s
================================================================================

✓ Nuevo mejor modelo guardado: Test Acc = 52.72% (época 31)

================================================================================
Época [31/150] Completada
================================================================================
Train Loss: 1.7422 | Train Acc: 47.26%
Test Loss:  1.5928 | Test Acc:  52.72%
Gap (Overfitting): -5.46%
Mejor Test Acc hasta ahora: 52.72% (época 31)
Épocas sin mejora: 0/15
Learning Rate actual: 1.00e-04
Tiempo de época: 237.73s
================================================================================

Epoch [32/150], Step [50/354], Loss: 1.5257, Acc: 47.88%
Epoch [32/150], Step [50/354], Loss: 1.5257, Acc: 47.88%
Epoch [32/150], Step [100/354], Loss: 1.7783, Acc: 48.62%
Epoch [32/150], Step [100/354], Loss: 1.7783, Acc: 48.62%
Epoch [32/150], Step [150/354], Loss: 1.7029, Acc: 48.06%
Epoch [32/150], Step [150/354], Loss: 1.7029, Acc: 48.06%
Epoch [32/150], Step [200/354], Loss: 2.1211, Acc: 47.80%
Epoch [32/150], Step [200/354], Loss: 2.1211, Acc: 47.80%
Epoch [32/150], Step [250/354], Loss: 1.1541, Acc: 48.08%
Epoch [32/150], Step [250/354], Loss: 1.1541, Acc: 48.08%
Epoch [32/150], Step [300/354], Loss: 1.8367, Acc: 47.81%
Epoch [32/150], Step [300/354], Loss: 1.8367, Acc: 47.81%
Epoch [32/150], Step [350/354], Loss: 1.7467, Acc: 47.68%
Epoch [32/150], Step [350/354], Loss: 1.7467, Acc: 47.68%

================================================================================
Época [32/150] Completada
================================================================================
Train Loss: 1.7217 | Train Acc: 47.79%
Test Loss:  1.6221 | Test Acc:  51.80%
Gap (Overfitting): -4.02%
Mejor Test Acc hasta ahora: 52.72% (época 31)
Épocas sin mejora: 1/15
Learning Rate actual: 1.00e-04
Tiempo de época: 212.68s
================================================================================


================================================================================
Época [32/150] Completada
================================================================================
Train Loss: 1.7217 | Train Acc: 47.79%
Test Loss:  1.6221 | Test Acc:  51.80%
Gap (Overfitting): -4.02%
Mejor Test Acc hasta ahora: 52.72% (época 31)
Épocas sin mejora: 1/15
Learning Rate actual: 1.00e-04
Tiempo de época: 212.68s
================================================================================

Epoch [33/150], Step [50/354], Loss: 1.6833, Acc: 48.69%
Epoch [33/150], Step [50/354], Loss: 1.6833, Acc: 48.69%
Epoch [33/150], Step [100/354], Loss: 1.4444, Acc: 48.81%
Epoch [33/150], Step [100/354], Loss: 1.4444, Acc: 48.81%
Epoch [33/150], Step [150/354], Loss: 1.9058, Acc: 48.69%
Epoch [33/150], Step [150/354], Loss: 1.9058, Acc: 48.69%
Epoch [33/150], Step [200/354], Loss: 1.7474, Acc: 48.67%
Epoch [33/150], Step [200/354], Loss: 1.7474, Acc: 48.67%
Epoch [33/150], Step [250/354], Loss: 1.5272, Acc: 48.45%
Epoch [33/150], Step [250/354], Loss: 1.5272, Acc: 48.45%
Epoch [33/150], Step [300/354], Loss: 1.8698, Acc: 48.17%
Epoch [33/150], Step [300/354], Loss: 1.8698, Acc: 48.17%
Epoch [33/150], Step [350/354], Loss: 1.7228, Acc: 48.15%
Epoch [33/150], Step [350/354], Loss: 1.7228, Acc: 48.15%
✓ Nuevo mejor modelo guardado: Test Acc = 54.42% (época 33)

================================================================================
Época [33/150] Completada
================================================================================
Train Loss: 1.7120 | Train Acc: 48.21%
Test Loss:  1.5568 | Test Acc:  54.42%
Gap (Overfitting): -6.21%
Mejor Test Acc hasta ahora: 54.42% (época 33)
Épocas sin mejora: 0/15
Learning Rate actual: 1.00e-04
Tiempo de época: 228.81s
================================================================================

✓ Nuevo mejor modelo guardado: Test Acc = 54.42% (época 33)

================================================================================
Época [33/150] Completada
================================================================================
Train Loss: 1.7120 | Train Acc: 48.21%
Test Loss:  1.5568 | Test Acc:  54.42%
Gap (Overfitting): -6.21%
Mejor Test Acc hasta ahora: 54.42% (época 33)
Épocas sin mejora: 0/15
Learning Rate actual: 1.00e-04
Tiempo de época: 228.81s
================================================================================

Epoch [34/150], Step [50/354], Loss: 1.5829, Acc: 47.56%
Epoch [34/150], Step [50/354], Loss: 1.5829, Acc: 47.56%
Epoch [34/150], Step [100/354], Loss: 1.9829, Acc: 48.00%
Epoch [34/150], Step [100/354], Loss: 1.9829, Acc: 48.00%
Epoch [34/150], Step [150/354], Loss: 1.6947, Acc: 48.12%
Epoch [34/150], Step [150/354], Loss: 1.6947, Acc: 48.12%
Epoch [34/150], Step [200/354], Loss: 1.6742, Acc: 48.14%
Epoch [34/150], Step [200/354], Loss: 1.6742, Acc: 48.14%
Epoch [34/150], Step [250/354], Loss: 1.3420, Acc: 48.56%
Epoch [34/150], Step [250/354], Loss: 1.3420, Acc: 48.56%
Epoch [34/150], Step [300/354], Loss: 1.6026, Acc: 48.45%
Epoch [34/150], Step [300/354], Loss: 1.6026, Acc: 48.45%
Epoch [34/150], Step [350/354], Loss: 1.5989, Acc: 48.73%
Epoch [34/150], Step [350/354], Loss: 1.5989, Acc: 48.73%

================================================================================
Época [34/150] Completada
================================================================================
Train Loss: 1.7049 | Train Acc: 48.71%
Test Loss:  1.6014 | Test Acc:  52.23%
Gap (Overfitting): -3.52%
Mejor Test Acc hasta ahora: 54.42% (época 33)
Épocas sin mejora: 1/15
Learning Rate actual: 1.00e-04
Tiempo de época: 205.96s
================================================================================


================================================================================
Época [34/150] Completada
================================================================================
Train Loss: 1.7049 | Train Acc: 48.71%
Test Loss:  1.6014 | Test Acc:  52.23%
Gap (Overfitting): -3.52%
Mejor Test Acc hasta ahora: 54.42% (época 33)
Épocas sin mejora: 1/15
Learning Rate actual: 1.00e-04
Tiempo de época: 205.96s
================================================================================

Epoch [35/150], Step [50/354], Loss: 1.9174, Acc: 48.81%
Epoch [35/150], Step [50/354], Loss: 1.9174, Acc: 48.81%
Epoch [35/150], Step [100/354], Loss: 1.6648, Acc: 48.75%
Epoch [35/150], Step [100/354], Loss: 1.6648, Acc: 48.75%
Epoch [35/150], Step [150/354], Loss: 1.3802, Acc: 48.79%
Epoch [35/150], Step [150/354], Loss: 1.3802, Acc: 48.79%
Epoch [35/150], Step [200/354], Loss: 1.6400, Acc: 49.06%
Epoch [35/150], Step [200/354], Loss: 1.6400, Acc: 49.06%
Epoch [35/150], Step [250/354], Loss: 1.7626, Acc: 49.04%
Epoch [35/150], Step [250/354], Loss: 1.7626, Acc: 49.04%
Epoch [35/150], Step [300/354], Loss: 1.7034, Acc: 48.80%
Epoch [35/150], Step [300/354], Loss: 1.7034, Acc: 48.80%
Epoch [35/150], Step [350/354], Loss: 1.5518, Acc: 48.42%
Epoch [35/150], Step [350/354], Loss: 1.5518, Acc: 48.42%

================================================================================
Época [35/150] Completada
================================================================================
Train Loss: 1.6902 | Train Acc: 48.32%
Test Loss:  1.5449 | Test Acc:  52.93%
Gap (Overfitting): -4.62%
Mejor Test Acc hasta ahora: 54.42% (época 33)
Épocas sin mejora: 2/15
Learning Rate actual: 1.00e-04
Tiempo de época: 192.96s
================================================================================


================================================================================
Época [35/150] Completada
================================================================================
Train Loss: 1.6902 | Train Acc: 48.32%
Test Loss:  1.5449 | Test Acc:  52.93%
Gap (Overfitting): -4.62%
Mejor Test Acc hasta ahora: 54.42% (época 33)
Épocas sin mejora: 2/15
Learning Rate actual: 1.00e-04
Tiempo de época: 192.96s
================================================================================

Epoch [36/150], Step [50/354], Loss: 1.6270, Acc: 51.06%
Epoch [36/150], Step [50/354], Loss: 1.6270, Acc: 51.06%
Epoch [36/150], Step [100/354], Loss: 1.9746, Acc: 49.56%
Epoch [36/150], Step [100/354], Loss: 1.9746, Acc: 49.56%
Epoch [36/150], Step [150/354], Loss: 1.9317, Acc: 49.94%
Epoch [36/150], Step [150/354], Loss: 1.9317, Acc: 49.94%
Epoch [36/150], Step [200/354], Loss: 1.6785, Acc: 50.22%
Epoch [36/150], Step [200/354], Loss: 1.6785, Acc: 50.22%
Epoch [36/150], Step [250/354], Loss: 1.8952, Acc: 49.71%
Epoch [36/150], Step [250/354], Loss: 1.8952, Acc: 49.71%
Epoch [36/150], Step [300/354], Loss: 1.5831, Acc: 49.28%
Epoch [36/150], Step [300/354], Loss: 1.5831, Acc: 49.28%
Epoch [36/150], Step [350/354], Loss: 1.5653, Acc: 49.43%
Epoch [36/150], Step [350/354], Loss: 1.5653, Acc: 49.43%
✓ Nuevo mejor modelo guardado: Test Acc = 55.19% (época 36)

================================================================================
Época [36/150] Completada
================================================================================
Train Loss: 1.6822 | Train Acc: 49.50%
Test Loss:  1.5460 | Test Acc:  55.19%
Gap (Overfitting): -5.69%
Mejor Test Acc hasta ahora: 55.19% (época 36)
Épocas sin mejora: 0/15
Learning Rate actual: 1.00e-04
Tiempo de época: 218.79s
================================================================================

✓ Nuevo mejor modelo guardado: Test Acc = 55.19% (época 36)

================================================================================
Época [36/150] Completada
================================================================================
Train Loss: 1.6822 | Train Acc: 49.50%
Test Loss:  1.5460 | Test Acc:  55.19%
Gap (Overfitting): -5.69%
Mejor Test Acc hasta ahora: 55.19% (época 36)
Épocas sin mejora: 0/15
Learning Rate actual: 1.00e-04
Tiempo de época: 218.79s
================================================================================

Epoch [37/150], Step [50/354], Loss: 1.2244, Acc: 52.56%
Epoch [37/150], Step [50/354], Loss: 1.2244, Acc: 52.56%
Epoch [37/150], Step [100/354], Loss: 1.6000, Acc: 50.56%
Epoch [37/150], Step [100/354], Loss: 1.6000, Acc: 50.56%
Epoch [37/150], Step [150/354], Loss: 1.7721, Acc: 50.35%
Epoch [37/150], Step [150/354], Loss: 1.7721, Acc: 50.35%
Epoch [37/150], Step [200/354], Loss: 1.2499, Acc: 49.92%
Epoch [37/150], Step [200/354], Loss: 1.2499, Acc: 49.92%
Epoch [37/150], Step [250/354], Loss: 1.2536, Acc: 49.56%
Epoch [37/150], Step [250/354], Loss: 1.2536, Acc: 49.56%
Epoch [37/150], Step [300/354], Loss: 1.7521, Acc: 49.61%
Epoch [37/150], Step [300/354], Loss: 1.7521, Acc: 49.61%
Epoch [37/150], Step [350/354], Loss: 1.6829, Acc: 49.50%
Epoch [37/150], Step [350/354], Loss: 1.6829, Acc: 49.50%

================================================================================
Época [37/150] Completada
================================================================================
Train Loss: 1.6574 | Train Acc: 49.47%
Test Loss:  1.5527 | Test Acc:  54.06%
Gap (Overfitting): -4.59%
Mejor Test Acc hasta ahora: 55.19% (época 36)
Épocas sin mejora: 1/15
Learning Rate actual: 1.00e-04
Tiempo de época: 249.61s
================================================================================


================================================================================
Época [37/150] Completada
================================================================================
Train Loss: 1.6574 | Train Acc: 49.47%
Test Loss:  1.5527 | Test Acc:  54.06%
Gap (Overfitting): -4.59%
Mejor Test Acc hasta ahora: 55.19% (época 36)
Épocas sin mejora: 1/15
Learning Rate actual: 1.00e-04
Tiempo de época: 249.61s
================================================================================

Epoch [38/150], Step [50/354], Loss: 1.2821, Acc: 47.38%
Epoch [38/150], Step [50/354], Loss: 1.2821, Acc: 47.38%
Epoch [38/150], Step [100/354], Loss: 1.5529, Acc: 48.06%
Epoch [38/150], Step [100/354], Loss: 1.5529, Acc: 48.06%
Epoch [38/150], Step [150/354], Loss: 1.6275, Acc: 49.35%
Epoch [38/150], Step [150/354], Loss: 1.6275, Acc: 49.35%
Epoch [38/150], Step [200/354], Loss: 1.4669, Acc: 49.30%
Epoch [38/150], Step [200/354], Loss: 1.4669, Acc: 49.30%
Epoch [38/150], Step [250/354], Loss: 1.8335, Acc: 49.10%
Epoch [38/150], Step [250/354], Loss: 1.8335, Acc: 49.10%
Epoch [38/150], Step [300/354], Loss: 1.6982, Acc: 49.54%
Epoch [38/150], Step [300/354], Loss: 1.6982, Acc: 49.54%
Epoch [38/150], Step [350/354], Loss: 1.9961, Acc: 49.56%
Epoch [38/150], Step [350/354], Loss: 1.9961, Acc: 49.56%

================================================================================
Época [38/150] Completada
================================================================================
Train Loss: 1.6432 | Train Acc: 49.46%
Test Loss:  1.5808 | Test Acc:  52.69%
Gap (Overfitting): -3.23%
Mejor Test Acc hasta ahora: 55.19% (época 36)
Épocas sin mejora: 2/15
Learning Rate actual: 1.00e-04
Tiempo de época: 250.07s
================================================================================


================================================================================
Época [38/150] Completada
================================================================================
Train Loss: 1.6432 | Train Acc: 49.46%
Test Loss:  1.5808 | Test Acc:  52.69%
Gap (Overfitting): -3.23%
Mejor Test Acc hasta ahora: 55.19% (época 36)
Épocas sin mejora: 2/15
Learning Rate actual: 1.00e-04
Tiempo de época: 250.07s
================================================================================

Epoch [39/150], Step [50/354], Loss: 1.6924, Acc: 51.75%
Epoch [39/150], Step [50/354], Loss: 1.6924, Acc: 51.75%
Epoch [39/150], Step [100/354], Loss: 2.1721, Acc: 50.91%
Epoch [39/150], Step [100/354], Loss: 2.1721, Acc: 50.91%
Epoch [39/150], Step [150/354], Loss: 1.3888, Acc: 50.60%
Epoch [39/150], Step [150/354], Loss: 1.3888, Acc: 50.60%
Epoch [39/150], Step [200/354], Loss: 1.7807, Acc: 50.75%
Epoch [39/150], Step [200/354], Loss: 1.7807, Acc: 50.75%
Epoch [39/150], Step [250/354], Loss: 1.3900, Acc: 50.71%
Epoch [39/150], Step [250/354], Loss: 1.3900, Acc: 50.71%
Epoch [39/150], Step [300/354], Loss: 1.4952, Acc: 50.61%
Epoch [39/150], Step [300/354], Loss: 1.4952, Acc: 50.61%
Epoch [39/150], Step [350/354], Loss: 1.3926, Acc: 50.46%
Epoch [39/150], Step [350/354], Loss: 1.3926, Acc: 50.46%

================================================================================
Época [39/150] Completada
================================================================================
Train Loss: 1.6239 | Train Acc: 50.51%
Test Loss:  1.6336 | Test Acc:  52.54%
Gap (Overfitting): -2.04%
Mejor Test Acc hasta ahora: 55.19% (época 36)
Épocas sin mejora: 3/15
Learning Rate actual: 1.00e-04
Tiempo de época: 248.43s
================================================================================


================================================================================
Época [39/150] Completada
================================================================================
Train Loss: 1.6239 | Train Acc: 50.51%
Test Loss:  1.6336 | Test Acc:  52.54%
Gap (Overfitting): -2.04%
Mejor Test Acc hasta ahora: 55.19% (época 36)
Épocas sin mejora: 3/15
Learning Rate actual: 1.00e-04
Tiempo de época: 248.43s
================================================================================

Epoch [40/150], Step [50/354], Loss: 1.7901, Acc: 50.56%
Epoch [40/150], Step [50/354], Loss: 1.7901, Acc: 50.56%
Epoch [40/150], Step [100/354], Loss: 1.2214, Acc: 51.53%
Epoch [40/150], Step [100/354], Loss: 1.2214, Acc: 51.53%
Epoch [40/150], Step [150/354], Loss: 1.5880, Acc: 51.35%
Epoch [40/150], Step [150/354], Loss: 1.5880, Acc: 51.35%
Epoch [40/150], Step [200/354], Loss: 1.8765, Acc: 51.48%
Epoch [40/150], Step [200/354], Loss: 1.8765, Acc: 51.48%
Epoch [40/150], Step [250/354], Loss: 1.8591, Acc: 50.99%
Epoch [40/150], Step [250/354], Loss: 1.8591, Acc: 50.99%
Epoch [40/150], Step [300/354], Loss: 1.3425, Acc: 50.94%
Epoch [40/150], Step [300/354], Loss: 1.3425, Acc: 50.94%
Epoch [40/150], Step [350/354], Loss: 1.3109, Acc: 50.73%
Epoch [40/150], Step [350/354], Loss: 1.3109, Acc: 50.73%
✓ Nuevo mejor modelo guardado: Test Acc = 55.30% (época 40)

================================================================================
Época [40/150] Completada
================================================================================
Train Loss: 1.6215 | Train Acc: 50.76%
Test Loss:  1.5062 | Test Acc:  55.30%
Gap (Overfitting): -4.54%
Mejor Test Acc hasta ahora: 55.30% (época 40)
Épocas sin mejora: 0/15
Learning Rate actual: 1.00e-04
Tiempo de época: 248.98s
================================================================================

✓ Nuevo mejor modelo guardado: Test Acc = 55.30% (época 40)

================================================================================
Época [40/150] Completada
================================================================================
Train Loss: 1.6215 | Train Acc: 50.76%
Test Loss:  1.5062 | Test Acc:  55.30%
Gap (Overfitting): -4.54%
Mejor Test Acc hasta ahora: 55.30% (época 40)
Épocas sin mejora: 0/15
Learning Rate actual: 1.00e-04
Tiempo de época: 248.98s
================================================================================

Epoch [41/150], Step [50/354], Loss: 1.4552, Acc: 50.06%
Epoch [41/150], Step [50/354], Loss: 1.4552, Acc: 50.06%
Epoch [41/150], Step [100/354], Loss: 1.7850, Acc: 51.22%
Epoch [41/150], Step [100/354], Loss: 1.7850, Acc: 51.22%
Epoch [41/150], Step [150/354], Loss: 1.8636, Acc: 51.15%
Epoch [41/150], Step [150/354], Loss: 1.8636, Acc: 51.15%
Epoch [41/150], Step [200/354], Loss: 1.8373, Acc: 51.27%
Epoch [41/150], Step [200/354], Loss: 1.8373, Acc: 51.27%
Epoch [41/150], Step [250/354], Loss: 1.2725, Acc: 51.49%
Epoch [41/150], Step [250/354], Loss: 1.2725, Acc: 51.49%
Epoch [41/150], Step [300/354], Loss: 1.5719, Acc: 51.64%
Epoch [41/150], Step [300/354], Loss: 1.5719, Acc: 51.64%
Epoch [41/150], Step [350/354], Loss: 1.9823, Acc: 51.70%
Epoch [41/150], Step [350/354], Loss: 1.9823, Acc: 51.70%
✓ Nuevo mejor modelo guardado: Test Acc = 55.44% (época 41)

================================================================================
Época [41/150] Completada
================================================================================
Train Loss: 1.5877 | Train Acc: 51.72%
Test Loss:  1.5289 | Test Acc:  55.44%
Gap (Overfitting): -3.72%
Mejor Test Acc hasta ahora: 55.44% (época 41)
Épocas sin mejora: 0/15
Learning Rate actual: 1.00e-04
Tiempo de época: 216.38s
================================================================================

✓ Nuevo mejor modelo guardado: Test Acc = 55.44% (época 41)

================================================================================
Época [41/150] Completada
================================================================================
Train Loss: 1.5877 | Train Acc: 51.72%
Test Loss:  1.5289 | Test Acc:  55.44%
Gap (Overfitting): -3.72%
Mejor Test Acc hasta ahora: 55.44% (época 41)
Épocas sin mejora: 0/15
Learning Rate actual: 1.00e-04
Tiempo de época: 216.38s
================================================================================

Epoch [42/150], Step [50/354], Loss: 1.8103, Acc: 50.50%
Epoch [42/150], Step [50/354], Loss: 1.8103, Acc: 50.50%
Epoch [42/150], Step [100/354], Loss: 1.4738, Acc: 51.31%
Epoch [42/150], Step [100/354], Loss: 1.4738, Acc: 51.31%
Epoch [42/150], Step [150/354], Loss: 1.4789, Acc: 50.81%
Epoch [42/150], Step [150/354], Loss: 1.4789, Acc: 50.81%
Epoch [42/150], Step [200/354], Loss: 1.4223, Acc: 51.73%
Epoch [42/150], Step [200/354], Loss: 1.4223, Acc: 51.73%
Epoch [42/150], Step [250/354], Loss: 1.6487, Acc: 52.19%
Epoch [42/150], Step [250/354], Loss: 1.6487, Acc: 52.19%
Epoch [42/150], Step [300/354], Loss: 1.3866, Acc: 52.02%
Epoch [42/150], Step [300/354], Loss: 1.3866, Acc: 52.02%
Epoch [42/150], Step [350/354], Loss: 1.4120, Acc: 51.79%
Epoch [42/150], Step [350/354], Loss: 1.4120, Acc: 51.79%

================================================================================
Época [42/150] Completada
================================================================================
Train Loss: 1.5687 | Train Acc: 51.76%
Test Loss:  1.6242 | Test Acc:  53.96%
Gap (Overfitting): -2.20%
Mejor Test Acc hasta ahora: 55.44% (época 41)
Épocas sin mejora: 1/15
Learning Rate actual: 1.00e-04
Tiempo de época: 222.82s
================================================================================


================================================================================
Época [42/150] Completada
================================================================================
Train Loss: 1.5687 | Train Acc: 51.76%
Test Loss:  1.6242 | Test Acc:  53.96%
Gap (Overfitting): -2.20%
Mejor Test Acc hasta ahora: 55.44% (época 41)
Épocas sin mejora: 1/15
Learning Rate actual: 1.00e-04
Tiempo de época: 222.82s
================================================================================

Epoch [43/150], Step [50/354], Loss: 1.5597, Acc: 53.12%
Epoch [43/150], Step [50/354], Loss: 1.5597, Acc: 53.12%
Epoch [43/150], Step [100/354], Loss: 1.7219, Acc: 52.97%
Epoch [43/150], Step [100/354], Loss: 1.7219, Acc: 52.97%
Epoch [43/150], Step [150/354], Loss: 1.8262, Acc: 52.94%
Epoch [43/150], Step [150/354], Loss: 1.8262, Acc: 52.94%
Epoch [43/150], Step [200/354], Loss: 2.0917, Acc: 52.50%
Epoch [43/150], Step [200/354], Loss: 2.0917, Acc: 52.50%
Epoch [43/150], Step [250/354], Loss: 1.6859, Acc: 51.95%
Epoch [43/150], Step [250/354], Loss: 1.6859, Acc: 51.95%
Epoch [43/150], Step [300/354], Loss: 1.4537, Acc: 51.82%
Epoch [43/150], Step [300/354], Loss: 1.4537, Acc: 51.82%
Epoch [43/150], Step [350/354], Loss: 1.7325, Acc: 51.92%
Epoch [43/150], Step [350/354], Loss: 1.7325, Acc: 51.92%
✓ Nuevo mejor modelo guardado: Test Acc = 55.51% (época 43)

================================================================================
Época [43/150] Completada
================================================================================
Train Loss: 1.5810 | Train Acc: 51.84%
Test Loss:  1.5120 | Test Acc:  55.51%
Gap (Overfitting): -3.67%
Mejor Test Acc hasta ahora: 55.51% (época 43)
Épocas sin mejora: 0/15
Learning Rate actual: 1.00e-04
Tiempo de época: 221.29s
================================================================================

✓ Nuevo mejor modelo guardado: Test Acc = 55.51% (época 43)

================================================================================
Época [43/150] Completada
================================================================================
Train Loss: 1.5810 | Train Acc: 51.84%
Test Loss:  1.5120 | Test Acc:  55.51%
Gap (Overfitting): -3.67%
Mejor Test Acc hasta ahora: 55.51% (época 43)
Épocas sin mejora: 0/15
Learning Rate actual: 1.00e-04
Tiempo de época: 221.29s
================================================================================

Epoch [44/150], Step [50/354], Loss: 2.3365, Acc: 51.81%
Epoch [44/150], Step [50/354], Loss: 2.3365, Acc: 51.81%
Epoch [44/150], Step [100/354], Loss: 1.4016, Acc: 53.03%
Epoch [44/150], Step [100/354], Loss: 1.4016, Acc: 53.03%
Epoch [44/150], Step [150/354], Loss: 2.0548, Acc: 52.40%
Epoch [44/150], Step [150/354], Loss: 2.0548, Acc: 52.40%
Epoch [44/150], Step [200/354], Loss: 1.6714, Acc: 52.55%
Epoch [44/150], Step [200/354], Loss: 1.6714, Acc: 52.55%
Epoch [44/150], Step [250/354], Loss: 1.6718, Acc: 52.60%
Epoch [44/150], Step [250/354], Loss: 1.6718, Acc: 52.60%
Epoch [44/150], Step [300/354], Loss: 1.1238, Acc: 52.85%
Epoch [44/150], Step [300/354], Loss: 1.1238, Acc: 52.85%
Epoch [44/150], Step [350/354], Loss: 1.2679, Acc: 52.77%
Epoch [44/150], Step [350/354], Loss: 1.2679, Acc: 52.77%

================================================================================
Época [44/150] Completada
================================================================================
Train Loss: 1.5646 | Train Acc: 52.84%
Test Loss:  1.5690 | Test Acc:  53.96%
Gap (Overfitting): -1.12%
Mejor Test Acc hasta ahora: 55.51% (época 43)
Épocas sin mejora: 1/15
Learning Rate actual: 1.00e-04
Tiempo de época: 177.05s
================================================================================


================================================================================
Época [44/150] Completada
================================================================================
Train Loss: 1.5646 | Train Acc: 52.84%
Test Loss:  1.5690 | Test Acc:  53.96%
Gap (Overfitting): -1.12%
Mejor Test Acc hasta ahora: 55.51% (época 43)
Épocas sin mejora: 1/15
Learning Rate actual: 1.00e-04
Tiempo de época: 177.05s
================================================================================

Epoch [45/150], Step [50/354], Loss: 1.6212, Acc: 54.00%
Epoch [45/150], Step [50/354], Loss: 1.6212, Acc: 54.00%
Epoch [45/150], Step [100/354], Loss: 1.2145, Acc: 53.84%
Epoch [45/150], Step [100/354], Loss: 1.2145, Acc: 53.84%
Epoch [45/150], Step [150/354], Loss: 1.8317, Acc: 54.17%
Epoch [45/150], Step [150/354], Loss: 1.8317, Acc: 54.17%
Epoch [45/150], Step [200/354], Loss: 1.5139, Acc: 53.80%
Epoch [45/150], Step [200/354], Loss: 1.5139, Acc: 53.80%
Epoch [45/150], Step [250/354], Loss: 1.6149, Acc: 53.29%
Epoch [45/150], Step [250/354], Loss: 1.6149, Acc: 53.29%
Epoch [45/150], Step [300/354], Loss: 1.1697, Acc: 52.98%
Epoch [45/150], Step [300/354], Loss: 1.1697, Acc: 52.98%
Epoch [45/150], Step [350/354], Loss: 1.3054, Acc: 53.04%
Epoch [45/150], Step [350/354], Loss: 1.3054, Acc: 53.04%
✓ Nuevo mejor modelo guardado: Test Acc = 56.68% (época 45)

================================================================================
Época [45/150] Completada
================================================================================
Train Loss: 1.5501 | Train Acc: 53.00%
Test Loss:  1.5063 | Test Acc:  56.68%
Gap (Overfitting): -3.68%
Mejor Test Acc hasta ahora: 56.68% (época 45)
Épocas sin mejora: 0/15
Learning Rate actual: 1.00e-04
Tiempo de época: 177.71s
================================================================================

✓ Nuevo mejor modelo guardado: Test Acc = 56.68% (época 45)

================================================================================
Época [45/150] Completada
================================================================================
Train Loss: 1.5501 | Train Acc: 53.00%
Test Loss:  1.5063 | Test Acc:  56.68%
Gap (Overfitting): -3.68%
Mejor Test Acc hasta ahora: 56.68% (época 45)
Épocas sin mejora: 0/15
Learning Rate actual: 1.00e-04
Tiempo de época: 177.71s
================================================================================

Epoch [46/150], Step [50/354], Loss: 1.8225, Acc: 55.12%
Epoch [46/150], Step [50/354], Loss: 1.8225, Acc: 55.12%
Epoch [46/150], Step [100/354], Loss: 1.7759, Acc: 53.66%
Epoch [46/150], Step [100/354], Loss: 1.7759, Acc: 53.66%
Epoch [46/150], Step [150/354], Loss: 1.6708, Acc: 53.33%
Epoch [46/150], Step [150/354], Loss: 1.6708, Acc: 53.33%
Epoch [46/150], Step [200/354], Loss: 1.7228, Acc: 53.31%
Epoch [46/150], Step [200/354], Loss: 1.7228, Acc: 53.31%
Epoch [46/150], Step [250/354], Loss: 1.4767, Acc: 53.51%
Epoch [46/150], Step [250/354], Loss: 1.4767, Acc: 53.51%
Epoch [46/150], Step [300/354], Loss: 1.0854, Acc: 53.68%
Epoch [46/150], Step [300/354], Loss: 1.0854, Acc: 53.68%
Epoch [46/150], Step [350/354], Loss: 1.8384, Acc: 53.18%
Epoch [46/150], Step [350/354], Loss: 1.8384, Acc: 53.18%

================================================================================
Época [46/150] Completada
================================================================================
Train Loss: 1.5339 | Train Acc: 53.24%
Test Loss:  1.5252 | Test Acc:  55.97%
Gap (Overfitting): -2.73%
Mejor Test Acc hasta ahora: 56.68% (época 45)
Épocas sin mejora: 1/15
Learning Rate actual: 1.00e-04
Tiempo de época: 211.10s
================================================================================


================================================================================
Época [46/150] Completada
================================================================================
Train Loss: 1.5339 | Train Acc: 53.24%
Test Loss:  1.5252 | Test Acc:  55.97%
Gap (Overfitting): -2.73%
Mejor Test Acc hasta ahora: 56.68% (época 45)
Épocas sin mejora: 1/15
Learning Rate actual: 1.00e-04
Tiempo de época: 211.10s
================================================================================

Epoch [47/150], Step [50/354], Loss: 1.2867, Acc: 53.38%
Epoch [47/150], Step [50/354], Loss: 1.2867, Acc: 53.38%
Epoch [47/150], Step [100/354], Loss: 1.6977, Acc: 54.66%
Epoch [47/150], Step [100/354], Loss: 1.6977, Acc: 54.66%
Epoch [47/150], Step [150/354], Loss: 1.4805, Acc: 54.21%
Epoch [47/150], Step [150/354], Loss: 1.4805, Acc: 54.21%
Epoch [47/150], Step [200/354], Loss: 1.3635, Acc: 54.28%
Epoch [47/150], Step [200/354], Loss: 1.3635, Acc: 54.28%
Epoch [47/150], Step [250/354], Loss: 1.7676, Acc: 54.09%
Epoch [47/150], Step [250/354], Loss: 1.7676, Acc: 54.09%
Epoch [47/150], Step [300/354], Loss: 1.6714, Acc: 53.70%
Epoch [47/150], Step [300/354], Loss: 1.6714, Acc: 53.70%
Epoch [47/150], Step [350/354], Loss: 1.5942, Acc: 53.52%
Epoch [47/150], Step [350/354], Loss: 1.5942, Acc: 53.52%
✓ Nuevo mejor modelo guardado: Test Acc = 57.46% (época 47)

================================================================================
Época [47/150] Completada
================================================================================
Train Loss: 1.5238 | Train Acc: 53.47%
Test Loss:  1.4563 | Test Acc:  57.46%
Gap (Overfitting): -3.99%
Mejor Test Acc hasta ahora: 57.46% (época 47)
Épocas sin mejora: 0/15
Learning Rate actual: 1.00e-04
Tiempo de época: 206.28s
================================================================================

✓ Nuevo mejor modelo guardado: Test Acc = 57.46% (época 47)

================================================================================
Época [47/150] Completada
================================================================================
Train Loss: 1.5238 | Train Acc: 53.47%
Test Loss:  1.4563 | Test Acc:  57.46%
Gap (Overfitting): -3.99%
Mejor Test Acc hasta ahora: 57.46% (época 47)
Épocas sin mejora: 0/15
Learning Rate actual: 1.00e-04
Tiempo de época: 206.28s
================================================================================

Epoch [48/150], Step [50/354], Loss: 1.7126, Acc: 54.44%
Epoch [48/150], Step [50/354], Loss: 1.7126, Acc: 54.44%
Epoch [48/150], Step [100/354], Loss: 1.4121, Acc: 54.78%
Epoch [48/150], Step [100/354], Loss: 1.4121, Acc: 54.78%
Epoch [48/150], Step [150/354], Loss: 1.4676, Acc: 54.69%
Epoch [48/150], Step [150/354], Loss: 1.4676, Acc: 54.69%
Epoch [48/150], Step [200/354], Loss: 1.2280, Acc: 54.22%
Epoch [48/150], Step [200/354], Loss: 1.2280, Acc: 54.22%
Epoch [48/150], Step [250/354], Loss: 1.4147, Acc: 53.96%
Epoch [48/150], Step [250/354], Loss: 1.4147, Acc: 53.96%
Epoch [48/150], Step [300/354], Loss: 1.3095, Acc: 53.81%
Epoch [48/150], Step [300/354], Loss: 1.3095, Acc: 53.81%
Epoch [48/150], Step [350/354], Loss: 1.5506, Acc: 54.04%
Epoch [48/150], Step [350/354], Loss: 1.5506, Acc: 54.04%

================================================================================
Época [48/150] Completada
================================================================================
Train Loss: 1.5161 | Train Acc: 53.98%
Test Loss:  1.5194 | Test Acc:  56.25%
Gap (Overfitting): -2.27%
Mejor Test Acc hasta ahora: 57.46% (época 47)
Épocas sin mejora: 1/15
Learning Rate actual: 1.00e-04
Tiempo de época: 232.27s
================================================================================


================================================================================
Época [48/150] Completada
================================================================================
Train Loss: 1.5161 | Train Acc: 53.98%
Test Loss:  1.5194 | Test Acc:  56.25%
Gap (Overfitting): -2.27%
Mejor Test Acc hasta ahora: 57.46% (época 47)
Épocas sin mejora: 1/15
Learning Rate actual: 1.00e-04
Tiempo de época: 232.27s
================================================================================

Epoch [49/150], Step [50/354], Loss: 1.6968, Acc: 52.44%
Epoch [49/150], Step [50/354], Loss: 1.6968, Acc: 52.44%
Epoch [49/150], Step [100/354], Loss: 1.5226, Acc: 53.59%
Epoch [49/150], Step [100/354], Loss: 1.5226, Acc: 53.59%
Epoch [49/150], Step [150/354], Loss: 1.8628, Acc: 53.52%
Epoch [49/150], Step [150/354], Loss: 1.8628, Acc: 53.52%
Epoch [49/150], Step [200/354], Loss: 1.7979, Acc: 53.81%
Epoch [49/150], Step [200/354], Loss: 1.7979, Acc: 53.81%
Epoch [49/150], Step [250/354], Loss: 1.5485, Acc: 53.79%
Epoch [49/150], Step [250/354], Loss: 1.5485, Acc: 53.79%
Epoch [49/150], Step [300/354], Loss: 1.9534, Acc: 53.32%
Epoch [49/150], Step [300/354], Loss: 1.9534, Acc: 53.32%
Epoch [49/150], Step [350/354], Loss: 1.2009, Acc: 53.61%
Epoch [49/150], Step [350/354], Loss: 1.2009, Acc: 53.61%

================================================================================
Época [49/150] Completada
================================================================================
Train Loss: 1.5018 | Train Acc: 53.58%
Test Loss:  1.5234 | Test Acc:  56.50%
Gap (Overfitting): -2.92%
Mejor Test Acc hasta ahora: 57.46% (época 47)
Épocas sin mejora: 2/15
Learning Rate actual: 1.00e-04
Tiempo de época: 232.32s
================================================================================


================================================================================
Época [49/150] Completada
================================================================================
Train Loss: 1.5018 | Train Acc: 53.58%
Test Loss:  1.5234 | Test Acc:  56.50%
Gap (Overfitting): -2.92%
Mejor Test Acc hasta ahora: 57.46% (época 47)
Épocas sin mejora: 2/15
Learning Rate actual: 1.00e-04
Tiempo de época: 232.32s
================================================================================

Epoch [50/150], Step [50/354], Loss: 0.9988, Acc: 54.88%
Epoch [50/150], Step [50/354], Loss: 0.9988, Acc: 54.88%
Epoch [50/150], Step [100/354], Loss: 1.7363, Acc: 56.31%
Epoch [50/150], Step [100/354], Loss: 1.7363, Acc: 56.31%
Epoch [50/150], Step [150/354], Loss: 1.8198, Acc: 55.75%
Epoch [50/150], Step [150/354], Loss: 1.8198, Acc: 55.75%
Epoch [50/150], Step [200/354], Loss: 1.4947, Acc: 55.14%
Epoch [50/150], Step [200/354], Loss: 1.4947, Acc: 55.14%
Epoch [50/150], Step [250/354], Loss: 1.2979, Acc: 55.20%
Epoch [50/150], Step [250/354], Loss: 1.2979, Acc: 55.20%
Epoch [50/150], Step [300/354], Loss: 1.4826, Acc: 54.58%
Epoch [50/150], Step [300/354], Loss: 1.4826, Acc: 54.58%
Epoch [50/150], Step [350/354], Loss: 1.3204, Acc: 54.47%
Epoch [50/150], Step [350/354], Loss: 1.3204, Acc: 54.47%
✓ Nuevo mejor modelo guardado: Test Acc = 59.22% (época 50)

================================================================================
Época [50/150] Completada
================================================================================
Train Loss: 1.4913 | Train Acc: 54.54%
Test Loss:  1.4469 | Test Acc:  59.22%
Gap (Overfitting): -4.69%
Mejor Test Acc hasta ahora: 59.22% (época 50)
Épocas sin mejora: 0/15
Learning Rate actual: 1.00e-04
Tiempo de época: 231.60s
================================================================================

✓ Nuevo mejor modelo guardado: Test Acc = 59.22% (época 50)

================================================================================
Época [50/150] Completada
================================================================================
Train Loss: 1.4913 | Train Acc: 54.54%
Test Loss:  1.4469 | Test Acc:  59.22%
Gap (Overfitting): -4.69%
Mejor Test Acc hasta ahora: 59.22% (época 50)
Épocas sin mejora: 0/15
Learning Rate actual: 1.00e-04
Tiempo de época: 231.60s
================================================================================

Epoch [51/150], Step [50/354], Loss: 1.2879, Acc: 56.38%
Epoch [51/150], Step [50/354], Loss: 1.2879, Acc: 56.38%
Epoch [51/150], Step [100/354], Loss: 1.5276, Acc: 56.03%
Epoch [51/150], Step [100/354], Loss: 1.5276, Acc: 56.03%
Epoch [51/150], Step [150/354], Loss: 1.3311, Acc: 55.50%
Epoch [51/150], Step [150/354], Loss: 1.3311, Acc: 55.50%
Epoch [51/150], Step [200/354], Loss: 1.5724, Acc: 55.05%
Epoch [51/150], Step [200/354], Loss: 1.5724, Acc: 55.05%
Epoch [51/150], Step [250/354], Loss: 1.2747, Acc: 54.80%
Epoch [51/150], Step [250/354], Loss: 1.2747, Acc: 54.80%
Epoch [51/150], Step [300/354], Loss: 1.1797, Acc: 54.71%
Epoch [51/150], Step [300/354], Loss: 1.1797, Acc: 54.71%
Epoch [51/150], Step [350/354], Loss: 1.6541, Acc: 54.41%
Epoch [51/150], Step [350/354], Loss: 1.6541, Acc: 54.41%

================================================================================
Época [51/150] Completada
================================================================================
Train Loss: 1.4794 | Train Acc: 54.42%
Test Loss:  1.4523 | Test Acc:  57.74%
Gap (Overfitting): -3.32%
Mejor Test Acc hasta ahora: 59.22% (época 50)
Épocas sin mejora: 1/15
Learning Rate actual: 1.00e-04
Tiempo de época: 230.00s
================================================================================


================================================================================
Época [51/150] Completada
================================================================================
Train Loss: 1.4794 | Train Acc: 54.42%
Test Loss:  1.4523 | Test Acc:  57.74%
Gap (Overfitting): -3.32%
Mejor Test Acc hasta ahora: 59.22% (época 50)
Épocas sin mejora: 1/15
Learning Rate actual: 1.00e-04
Tiempo de época: 230.00s
================================================================================

Epoch [52/150], Step [50/354], Loss: 1.4614, Acc: 55.88%
Epoch [52/150], Step [50/354], Loss: 1.4614, Acc: 55.88%
Epoch [52/150], Step [100/354], Loss: 1.3691, Acc: 54.88%
Epoch [52/150], Step [100/354], Loss: 1.3691, Acc: 54.88%
Epoch [52/150], Step [150/354], Loss: 1.2179, Acc: 55.46%
Epoch [52/150], Step [150/354], Loss: 1.2179, Acc: 55.46%
Epoch [52/150], Step [200/354], Loss: 1.6509, Acc: 55.34%
Epoch [52/150], Step [200/354], Loss: 1.6509, Acc: 55.34%
Epoch [52/150], Step [250/354], Loss: 1.5926, Acc: 55.23%
Epoch [52/150], Step [250/354], Loss: 1.5926, Acc: 55.23%
Epoch [52/150], Step [300/354], Loss: 1.8341, Acc: 55.16%
Epoch [52/150], Step [300/354], Loss: 1.8341, Acc: 55.16%
Epoch [52/150], Step [350/354], Loss: 1.2927, Acc: 55.50%
Epoch [52/150], Step [350/354], Loss: 1.2927, Acc: 55.50%

================================================================================
Época [52/150] Completada
================================================================================
Train Loss: 1.4597 | Train Acc: 55.52%
Test Loss:  1.4822 | Test Acc:  59.12%
Gap (Overfitting): -3.60%
Mejor Test Acc hasta ahora: 59.22% (época 50)
Épocas sin mejora: 2/15
Learning Rate actual: 1.00e-04
Tiempo de época: 224.90s
================================================================================


================================================================================
Época [52/150] Completada
================================================================================
Train Loss: 1.4597 | Train Acc: 55.52%
Test Loss:  1.4822 | Test Acc:  59.12%
Gap (Overfitting): -3.60%
Mejor Test Acc hasta ahora: 59.22% (época 50)
Épocas sin mejora: 2/15
Learning Rate actual: 1.00e-04
Tiempo de época: 224.90s
================================================================================

Epoch [53/150], Step [50/354], Loss: 1.3282, Acc: 55.50%
Epoch [53/150], Step [50/354], Loss: 1.3282, Acc: 55.50%
Epoch [53/150], Step [100/354], Loss: 1.2710, Acc: 56.28%
Epoch [53/150], Step [100/354], Loss: 1.2710, Acc: 56.28%
Epoch [53/150], Step [150/354], Loss: 1.5060, Acc: 55.88%
Epoch [53/150], Step [150/354], Loss: 1.5060, Acc: 55.88%
Epoch [53/150], Step [200/354], Loss: 1.8715, Acc: 55.56%
Epoch [53/150], Step [200/354], Loss: 1.8715, Acc: 55.56%
Epoch [53/150], Step [250/354], Loss: 1.4292, Acc: 55.52%
Epoch [53/150], Step [250/354], Loss: 1.4292, Acc: 55.52%
Epoch [53/150], Step [300/354], Loss: 1.4054, Acc: 55.30%
Epoch [53/150], Step [300/354], Loss: 1.4054, Acc: 55.30%
Epoch [53/150], Step [350/354], Loss: 1.5109, Acc: 55.38%
Epoch [53/150], Step [350/354], Loss: 1.5109, Acc: 55.38%

================================================================================
Época [53/150] Completada
================================================================================
Train Loss: 1.4646 | Train Acc: 55.45%
Test Loss:  1.4692 | Test Acc:  58.87%
Gap (Overfitting): -3.42%
Mejor Test Acc hasta ahora: 59.22% (época 50)
Épocas sin mejora: 3/15
Learning Rate actual: 1.00e-04
Tiempo de época: 223.68s
================================================================================


================================================================================
Época [53/150] Completada
================================================================================
Train Loss: 1.4646 | Train Acc: 55.45%
Test Loss:  1.4692 | Test Acc:  58.87%
Gap (Overfitting): -3.42%
Mejor Test Acc hasta ahora: 59.22% (época 50)
Épocas sin mejora: 3/15
Learning Rate actual: 1.00e-04
Tiempo de época: 223.68s
================================================================================

Epoch [54/150], Step [50/354], Loss: 1.5080, Acc: 57.81%
Epoch [54/150], Step [50/354], Loss: 1.5080, Acc: 57.81%
Epoch [54/150], Step [100/354], Loss: 1.5811, Acc: 57.31%
Epoch [54/150], Step [100/354], Loss: 1.5811, Acc: 57.31%
Epoch [54/150], Step [150/354], Loss: 1.5449, Acc: 56.54%
Epoch [54/150], Step [150/354], Loss: 1.5449, Acc: 56.54%
Epoch [54/150], Step [200/354], Loss: 1.0735, Acc: 56.88%
Epoch [54/150], Step [200/354], Loss: 1.0735, Acc: 56.88%
Epoch [54/150], Step [250/354], Loss: 1.1633, Acc: 56.40%
Epoch [54/150], Step [250/354], Loss: 1.1633, Acc: 56.40%
Epoch [54/150], Step [300/354], Loss: 1.4432, Acc: 55.88%
Epoch [54/150], Step [300/354], Loss: 1.4432, Acc: 55.88%
Epoch [54/150], Step [350/354], Loss: 1.4682, Acc: 56.04%
Epoch [54/150], Step [350/354], Loss: 1.4682, Acc: 56.04%

================================================================================
Época [54/150] Completada
================================================================================
Train Loss: 1.4528 | Train Acc: 56.07%
Test Loss:  1.5366 | Test Acc:  56.40%
Gap (Overfitting): -0.32%
Mejor Test Acc hasta ahora: 59.22% (época 50)
Épocas sin mejora: 4/15
Learning Rate actual: 1.00e-04
Tiempo de época: 222.95s
================================================================================


================================================================================
Época [54/150] Completada
================================================================================
Train Loss: 1.4528 | Train Acc: 56.07%
Test Loss:  1.5366 | Test Acc:  56.40%
Gap (Overfitting): -0.32%
Mejor Test Acc hasta ahora: 59.22% (época 50)
Épocas sin mejora: 4/15
Learning Rate actual: 1.00e-04
Tiempo de época: 222.95s
================================================================================

Epoch [55/150], Step [50/354], Loss: 1.5601, Acc: 58.62%
Epoch [55/150], Step [50/354], Loss: 1.5601, Acc: 58.62%
Epoch [55/150], Step [100/354], Loss: 1.4421, Acc: 58.06%
Epoch [55/150], Step [100/354], Loss: 1.4421, Acc: 58.06%
Epoch [55/150], Step [150/354], Loss: 1.4037, Acc: 56.77%
Epoch [55/150], Step [150/354], Loss: 1.4037, Acc: 56.77%
Epoch [55/150], Step [200/354], Loss: 1.8491, Acc: 56.61%
Epoch [55/150], Step [200/354], Loss: 1.8491, Acc: 56.61%
Epoch [55/150], Step [250/354], Loss: 1.5903, Acc: 56.46%
Epoch [55/150], Step [250/354], Loss: 1.5903, Acc: 56.46%
Epoch [55/150], Step [300/354], Loss: 1.0028, Acc: 56.74%
Epoch [55/150], Step [300/354], Loss: 1.0028, Acc: 56.74%
Epoch [55/150], Step [350/354], Loss: 1.7132, Acc: 56.46%
Epoch [55/150], Step [350/354], Loss: 1.7132, Acc: 56.46%

================================================================================
Época [55/150] Completada
================================================================================
Train Loss: 1.4249 | Train Acc: 56.51%
Test Loss:  1.4477 | Test Acc:  58.52%
Gap (Overfitting): -2.01%
Mejor Test Acc hasta ahora: 59.22% (época 50)
Épocas sin mejora: 5/15
Learning Rate actual: 1.00e-04
Tiempo de época: 224.54s
================================================================================


================================================================================
Época [55/150] Completada
================================================================================
Train Loss: 1.4249 | Train Acc: 56.51%
Test Loss:  1.4477 | Test Acc:  58.52%
Gap (Overfitting): -2.01%
Mejor Test Acc hasta ahora: 59.22% (época 50)
Épocas sin mejora: 5/15
Learning Rate actual: 1.00e-04
Tiempo de época: 224.54s
================================================================================

Epoch [56/150], Step [50/354], Loss: 1.5801, Acc: 55.75%
Epoch [56/150], Step [50/354], Loss: 1.5801, Acc: 55.75%
Epoch [56/150], Step [100/354], Loss: 1.0905, Acc: 56.72%
Epoch [56/150], Step [100/354], Loss: 1.0905, Acc: 56.72%
Epoch [56/150], Step [150/354], Loss: 1.1796, Acc: 56.29%
Epoch [56/150], Step [150/354], Loss: 1.1796, Acc: 56.29%
Epoch [56/150], Step [200/354], Loss: 1.4205, Acc: 56.36%
Epoch [56/150], Step [200/354], Loss: 1.4205, Acc: 56.36%
Epoch [56/150], Step [250/354], Loss: 1.4952, Acc: 56.56%
Epoch [56/150], Step [250/354], Loss: 1.4952, Acc: 56.56%
Epoch [56/150], Step [300/354], Loss: 1.9193, Acc: 56.26%
Epoch [56/150], Step [300/354], Loss: 1.9193, Acc: 56.26%
Epoch [56/150], Step [350/354], Loss: 1.4550, Acc: 56.56%
Epoch [56/150], Step [350/354], Loss: 1.4550, Acc: 56.56%

================================================================================
Época [56/150] Completada
================================================================================
Train Loss: 1.4201 | Train Acc: 56.56%
Test Loss:  1.4762 | Test Acc:  58.48%
Gap (Overfitting): -1.92%
Mejor Test Acc hasta ahora: 59.22% (época 50)
Épocas sin mejora: 6/15
Learning Rate actual: 1.00e-04
Tiempo de época: 223.78s
================================================================================


================================================================================
Época [56/150] Completada
================================================================================
Train Loss: 1.4201 | Train Acc: 56.56%
Test Loss:  1.4762 | Test Acc:  58.48%
Gap (Overfitting): -1.92%
Mejor Test Acc hasta ahora: 59.22% (época 50)
Épocas sin mejora: 6/15
Learning Rate actual: 1.00e-04
Tiempo de época: 223.78s
================================================================================

Epoch [57/150], Step [50/354], Loss: 1.4893, Acc: 57.88%
Epoch [57/150], Step [50/354], Loss: 1.4893, Acc: 57.88%
Epoch [57/150], Step [100/354], Loss: 1.5062, Acc: 58.19%
Epoch [57/150], Step [100/354], Loss: 1.5062, Acc: 58.19%
Epoch [57/150], Step [150/354], Loss: 1.3614, Acc: 58.21%
Epoch [57/150], Step [150/354], Loss: 1.3614, Acc: 58.21%
Epoch [57/150], Step [200/354], Loss: 1.7238, Acc: 57.33%
Epoch [57/150], Step [200/354], Loss: 1.7238, Acc: 57.33%
Epoch [57/150], Step [250/354], Loss: 1.7928, Acc: 57.00%
Epoch [57/150], Step [250/354], Loss: 1.7928, Acc: 57.00%
Epoch [57/150], Step [300/354], Loss: 0.9757, Acc: 56.74%
Epoch [57/150], Step [300/354], Loss: 0.9757, Acc: 56.74%
Epoch [57/150], Step [350/354], Loss: 1.2842, Acc: 57.00%
Epoch [57/150], Step [350/354], Loss: 1.2842, Acc: 57.00%
✓ Nuevo mejor modelo guardado: Test Acc = 60.28% (época 57)

================================================================================
Época [57/150] Completada
================================================================================
Train Loss: 1.4158 | Train Acc: 56.89%
Test Loss:  1.4397 | Test Acc:  60.28%
Gap (Overfitting): -3.40%
Mejor Test Acc hasta ahora: 60.28% (época 57)
Épocas sin mejora: 0/15
Learning Rate actual: 1.00e-04
Tiempo de época: 227.49s
================================================================================

✓ Nuevo mejor modelo guardado: Test Acc = 60.28% (época 57)

================================================================================
Época [57/150] Completada
================================================================================
Train Loss: 1.4158 | Train Acc: 56.89%
Test Loss:  1.4397 | Test Acc:  60.28%
Gap (Overfitting): -3.40%
Mejor Test Acc hasta ahora: 60.28% (época 57)
Épocas sin mejora: 0/15
Learning Rate actual: 1.00e-04
Tiempo de época: 227.49s
================================================================================

Epoch [58/150], Step [50/354], Loss: 1.2739, Acc: 60.94%
Epoch [58/150], Step [50/354], Loss: 1.2739, Acc: 60.94%
Epoch [58/150], Step [100/354], Loss: 1.2642, Acc: 59.59%
Epoch [58/150], Step [100/354], Loss: 1.2642, Acc: 59.59%
Epoch [58/150], Step [150/354], Loss: 1.4270, Acc: 58.25%
Epoch [58/150], Step [150/354], Loss: 1.4270, Acc: 58.25%
Epoch [58/150], Step [200/354], Loss: 1.4335, Acc: 57.77%
Epoch [58/150], Step [200/354], Loss: 1.4335, Acc: 57.77%
Epoch [58/150], Step [250/354], Loss: 1.6102, Acc: 57.50%
Epoch [58/150], Step [250/354], Loss: 1.6102, Acc: 57.50%
Epoch [58/150], Step [300/354], Loss: 1.4553, Acc: 57.74%
Epoch [58/150], Step [300/354], Loss: 1.4553, Acc: 57.74%
Epoch [58/150], Step [350/354], Loss: 1.5212, Acc: 57.27%
Epoch [58/150], Step [350/354], Loss: 1.5212, Acc: 57.27%

================================================================================
Época [58/150] Completada
================================================================================
Train Loss: 1.3957 | Train Acc: 57.21%
Test Loss:  1.5278 | Test Acc:  57.42%
Gap (Overfitting): -0.21%
Mejor Test Acc hasta ahora: 60.28% (época 57)
Épocas sin mejora: 1/15
Learning Rate actual: 1.00e-04
Tiempo de época: 285.35s
================================================================================


================================================================================
Época [58/150] Completada
================================================================================
Train Loss: 1.3957 | Train Acc: 57.21%
Test Loss:  1.5278 | Test Acc:  57.42%
Gap (Overfitting): -0.21%
Mejor Test Acc hasta ahora: 60.28% (época 57)
Épocas sin mejora: 1/15
Learning Rate actual: 1.00e-04
Tiempo de época: 285.35s
================================================================================

Epoch [59/150], Step [50/354], Loss: 1.1435, Acc: 58.38%
Epoch [59/150], Step [50/354], Loss: 1.1435, Acc: 58.38%
Epoch [59/150], Step [100/354], Loss: 1.5951, Acc: 58.34%
Epoch [59/150], Step [100/354], Loss: 1.5951, Acc: 58.34%
Epoch [59/150], Step [150/354], Loss: 1.3348, Acc: 57.79%
Epoch [59/150], Step [150/354], Loss: 1.3348, Acc: 57.79%
Epoch [59/150], Step [200/354], Loss: 1.3592, Acc: 57.78%
Epoch [59/150], Step [200/354], Loss: 1.3592, Acc: 57.78%
Epoch [59/150], Step [250/354], Loss: 1.5911, Acc: 58.06%
Epoch [59/150], Step [250/354], Loss: 1.5911, Acc: 58.06%
Epoch [59/150], Step [300/354], Loss: 1.3927, Acc: 58.05%
Epoch [59/150], Step [300/354], Loss: 1.3927, Acc: 58.05%
Epoch [59/150], Step [350/354], Loss: 1.2413, Acc: 57.82%
Epoch [59/150], Step [350/354], Loss: 1.2413, Acc: 57.82%

================================================================================
Época [59/150] Completada
================================================================================
Train Loss: 1.3767 | Train Acc: 57.83%
Test Loss:  1.4610 | Test Acc:  57.81%
Gap (Overfitting): 0.02%
Mejor Test Acc hasta ahora: 60.28% (época 57)
Épocas sin mejora: 2/15
Learning Rate actual: 1.00e-04
Tiempo de época: 282.97s
================================================================================


================================================================================
Época [59/150] Completada
================================================================================
Train Loss: 1.3767 | Train Acc: 57.83%
Test Loss:  1.4610 | Test Acc:  57.81%
Gap (Overfitting): 0.02%
Mejor Test Acc hasta ahora: 60.28% (época 57)
Épocas sin mejora: 2/15
Learning Rate actual: 1.00e-04
Tiempo de época: 282.97s
================================================================================

Epoch [60/150], Step [50/354], Loss: 1.2284, Acc: 57.00%
Epoch [60/150], Step [50/354], Loss: 1.2284, Acc: 57.00%
Epoch [60/150], Step [100/354], Loss: 1.2032, Acc: 56.91%
Epoch [60/150], Step [100/354], Loss: 1.2032, Acc: 56.91%
Epoch [60/150], Step [150/354], Loss: 1.0525, Acc: 57.02%
Epoch [60/150], Step [150/354], Loss: 1.0525, Acc: 57.02%
Epoch [60/150], Step [200/354], Loss: 1.8777, Acc: 56.72%
Epoch [60/150], Step [200/354], Loss: 1.8777, Acc: 56.72%
Epoch [60/150], Step [250/354], Loss: 1.2019, Acc: 57.11%
Epoch [60/150], Step [250/354], Loss: 1.2019, Acc: 57.11%
Epoch [60/150], Step [300/354], Loss: 2.0605, Acc: 56.95%
Epoch [60/150], Step [300/354], Loss: 2.0605, Acc: 56.95%
Epoch [60/150], Step [350/354], Loss: 1.4131, Acc: 56.94%
Epoch [60/150], Step [350/354], Loss: 1.4131, Acc: 56.94%

================================================================================
Época [60/150] Completada
================================================================================
Train Loss: 1.3991 | Train Acc: 56.85%
Test Loss:  1.4538 | Test Acc:  58.80%
Gap (Overfitting): -1.95%
Mejor Test Acc hasta ahora: 60.28% (época 57)
Épocas sin mejora: 3/15
Learning Rate actual: 1.00e-04
Tiempo de época: 241.82s
================================================================================


================================================================================
Época [60/150] Completada
================================================================================
Train Loss: 1.3991 | Train Acc: 56.85%
Test Loss:  1.4538 | Test Acc:  58.80%
Gap (Overfitting): -1.95%
Mejor Test Acc hasta ahora: 60.28% (época 57)
Épocas sin mejora: 3/15
Learning Rate actual: 1.00e-04
Tiempo de época: 241.82s
================================================================================

Epoch [61/150], Step [50/354], Loss: 1.4974, Acc: 58.75%
Epoch [61/150], Step [50/354], Loss: 1.4974, Acc: 58.75%
Epoch [61/150], Step [100/354], Loss: 1.8651, Acc: 58.12%
Epoch [61/150], Step [100/354], Loss: 1.8651, Acc: 58.12%
Epoch [61/150], Step [150/354], Loss: 1.0702, Acc: 58.23%
Epoch [61/150], Step [150/354], Loss: 1.0702, Acc: 58.23%
Epoch [61/150], Step [200/354], Loss: 1.1997, Acc: 58.27%
Epoch [61/150], Step [200/354], Loss: 1.1997, Acc: 58.27%
Epoch [61/150], Step [250/354], Loss: 1.1895, Acc: 58.12%
Epoch [61/150], Step [250/354], Loss: 1.1895, Acc: 58.12%
Epoch [61/150], Step [300/354], Loss: 1.8733, Acc: 57.64%
Epoch [61/150], Step [300/354], Loss: 1.8733, Acc: 57.64%
Epoch [61/150], Step [350/354], Loss: 0.9886, Acc: 57.76%
Epoch [61/150], Step [350/354], Loss: 0.9886, Acc: 57.76%
✓ Nuevo mejor modelo guardado: Test Acc = 60.32% (época 61)

================================================================================
Época [61/150] Completada
================================================================================
Train Loss: 1.3785 | Train Acc: 57.73%
Test Loss:  1.4469 | Test Acc:  60.32%
Gap (Overfitting): -2.59%
Mejor Test Acc hasta ahora: 60.32% (época 61)
Épocas sin mejora: 0/15
Learning Rate actual: 1.00e-04
Tiempo de época: 271.64s
================================================================================

✓ Nuevo mejor modelo guardado: Test Acc = 60.32% (época 61)

================================================================================
Época [61/150] Completada
================================================================================
Train Loss: 1.3785 | Train Acc: 57.73%
Test Loss:  1.4469 | Test Acc:  60.32%
Gap (Overfitting): -2.59%
Mejor Test Acc hasta ahora: 60.32% (época 61)
Épocas sin mejora: 0/15
Learning Rate actual: 1.00e-04
Tiempo de época: 271.64s
================================================================================

Epoch [62/150], Step [50/354], Loss: 1.5895, Acc: 58.69%
Epoch [62/150], Step [50/354], Loss: 1.5895, Acc: 58.69%
Epoch [62/150], Step [100/354], Loss: 1.9608, Acc: 59.28%
Epoch [62/150], Step [100/354], Loss: 1.9608, Acc: 59.28%
Epoch [62/150], Step [150/354], Loss: 0.9624, Acc: 59.67%
Epoch [62/150], Step [150/354], Loss: 0.9624, Acc: 59.67%
Epoch [62/150], Step [200/354], Loss: 1.3788, Acc: 59.61%
Epoch [62/150], Step [200/354], Loss: 1.3788, Acc: 59.61%
Epoch [62/150], Step [250/354], Loss: 1.4573, Acc: 58.77%
Epoch [62/150], Step [250/354], Loss: 1.4573, Acc: 58.77%
Epoch [62/150], Step [300/354], Loss: 1.2482, Acc: 58.90%
Epoch [62/150], Step [300/354], Loss: 1.2482, Acc: 58.90%
Epoch [62/150], Step [350/354], Loss: 0.7780, Acc: 58.87%
Epoch [62/150], Step [350/354], Loss: 0.7780, Acc: 58.87%

================================================================================
Época [62/150] Completada
================================================================================
Train Loss: 1.3568 | Train Acc: 58.87%
Test Loss:  1.5458 | Test Acc:  58.52%
Gap (Overfitting): 0.35%
Mejor Test Acc hasta ahora: 60.32% (época 61)
Épocas sin mejora: 1/15
Learning Rate actual: 1.00e-04
Tiempo de época: 286.96s
================================================================================


================================================================================
Época [62/150] Completada
================================================================================
Train Loss: 1.3568 | Train Acc: 58.87%
Test Loss:  1.5458 | Test Acc:  58.52%
Gap (Overfitting): 0.35%
Mejor Test Acc hasta ahora: 60.32% (época 61)
Épocas sin mejora: 1/15
Learning Rate actual: 1.00e-04
Tiempo de época: 286.96s
================================================================================

Epoch [63/150], Step [50/354], Loss: 1.4102, Acc: 58.62%
Epoch [63/150], Step [50/354], Loss: 1.4102, Acc: 58.62%
Epoch [63/150], Step [100/354], Loss: 1.2201, Acc: 58.09%
Epoch [63/150], Step [100/354], Loss: 1.2201, Acc: 58.09%
Epoch [63/150], Step [150/354], Loss: 1.6869, Acc: 58.52%
Epoch [63/150], Step [150/354], Loss: 1.6869, Acc: 58.52%
Epoch [63/150], Step [200/354], Loss: 1.4634, Acc: 58.41%
Epoch [63/150], Step [200/354], Loss: 1.4634, Acc: 58.41%
Epoch [63/150], Step [250/354], Loss: 0.8307, Acc: 58.74%
Epoch [63/150], Step [250/354], Loss: 0.8307, Acc: 58.74%
Epoch [63/150], Step [300/354], Loss: 1.4550, Acc: 59.03%
Epoch [63/150], Step [300/354], Loss: 1.4550, Acc: 59.03%
Epoch [63/150], Step [350/354], Loss: 1.5008, Acc: 59.05%
Epoch [63/150], Step [350/354], Loss: 1.5008, Acc: 59.05%

================================================================================
Época [63/150] Completada
================================================================================
Train Loss: 1.3387 | Train Acc: 59.05%
Test Loss:  1.5829 | Test Acc:  57.31%
Gap (Overfitting): 1.74%
Mejor Test Acc hasta ahora: 60.32% (época 61)
Épocas sin mejora: 2/15
Learning Rate actual: 1.00e-04
Tiempo de época: 286.77s
================================================================================


================================================================================
Época [63/150] Completada
================================================================================
Train Loss: 1.3387 | Train Acc: 59.05%
Test Loss:  1.5829 | Test Acc:  57.31%
Gap (Overfitting): 1.74%
Mejor Test Acc hasta ahora: 60.32% (época 61)
Épocas sin mejora: 2/15
Learning Rate actual: 1.00e-04
Tiempo de época: 286.77s
================================================================================

Epoch [64/150], Step [50/354], Loss: 1.3630, Acc: 60.31%
Epoch [64/150], Step [50/354], Loss: 1.3630, Acc: 60.31%
Epoch [64/150], Step [100/354], Loss: 1.1096, Acc: 60.62%
Epoch [64/150], Step [100/354], Loss: 1.1096, Acc: 60.62%
Epoch [64/150], Step [150/354], Loss: 1.0529, Acc: 60.81%
Epoch [64/150], Step [150/354], Loss: 1.0529, Acc: 60.81%
Epoch [64/150], Step [200/354], Loss: 1.2638, Acc: 60.12%
Epoch [64/150], Step [200/354], Loss: 1.2638, Acc: 60.12%
Epoch [64/150], Step [250/354], Loss: 1.4766, Acc: 59.65%
Epoch [64/150], Step [250/354], Loss: 1.4766, Acc: 59.65%
Epoch [64/150], Step [300/354], Loss: 1.1301, Acc: 59.40%
Epoch [64/150], Step [300/354], Loss: 1.1301, Acc: 59.40%
Epoch [64/150], Step [350/354], Loss: 1.1361, Acc: 59.18%
Epoch [64/150], Step [350/354], Loss: 1.1361, Acc: 59.18%

================================================================================
Época [64/150] Completada
================================================================================
Train Loss: 1.3379 | Train Acc: 59.18%
Test Loss:  1.4549 | Test Acc:  59.43%
Gap (Overfitting): -0.25%
Mejor Test Acc hasta ahora: 60.32% (época 61)
Épocas sin mejora: 3/15
Learning Rate actual: 1.00e-04
Tiempo de época: 299.49s
================================================================================


================================================================================
Época [64/150] Completada
================================================================================
Train Loss: 1.3379 | Train Acc: 59.18%
Test Loss:  1.4549 | Test Acc:  59.43%
Gap (Overfitting): -0.25%
Mejor Test Acc hasta ahora: 60.32% (época 61)
Épocas sin mejora: 3/15
Learning Rate actual: 1.00e-04
Tiempo de época: 299.49s
================================================================================

Epoch [65/150], Step [50/354], Loss: 1.5009, Acc: 58.19%
Epoch [65/150], Step [50/354], Loss: 1.5009, Acc: 58.19%
Epoch [65/150], Step [100/354], Loss: 1.3042, Acc: 57.59%
Epoch [65/150], Step [100/354], Loss: 1.3042, Acc: 57.59%
Epoch [65/150], Step [150/354], Loss: 1.3334, Acc: 59.27%
Epoch [65/150], Step [150/354], Loss: 1.3334, Acc: 59.27%
Epoch [65/150], Step [200/354], Loss: 1.1179, Acc: 58.91%
Epoch [65/150], Step [200/354], Loss: 1.1179, Acc: 58.91%
Epoch [65/150], Step [250/354], Loss: 1.8752, Acc: 59.12%
Epoch [65/150], Step [250/354], Loss: 1.8752, Acc: 59.12%
Epoch [65/150], Step [300/354], Loss: 1.5167, Acc: 58.76%
Epoch [65/150], Step [300/354], Loss: 1.5167, Acc: 58.76%
Epoch [65/150], Step [350/354], Loss: 0.9006, Acc: 58.62%
Epoch [65/150], Step [350/354], Loss: 0.9006, Acc: 58.62%
✓ Nuevo mejor modelo guardado: Test Acc = 60.95% (época 65)

================================================================================
Época [65/150] Completada
================================================================================
Train Loss: 1.3462 | Train Acc: 58.63%
Test Loss:  1.3864 | Test Acc:  60.95%
Gap (Overfitting): -2.33%
Mejor Test Acc hasta ahora: 60.95% (época 65)
Épocas sin mejora: 0/15
Learning Rate actual: 1.00e-04
Tiempo de época: 290.06s
================================================================================

✓ Nuevo mejor modelo guardado: Test Acc = 60.95% (época 65)

================================================================================
Época [65/150] Completada
================================================================================
Train Loss: 1.3462 | Train Acc: 58.63%
Test Loss:  1.3864 | Test Acc:  60.95%
Gap (Overfitting): -2.33%
Mejor Test Acc hasta ahora: 60.95% (época 65)
Épocas sin mejora: 0/15
Learning Rate actual: 1.00e-04
Tiempo de época: 290.06s
================================================================================

Epoch [66/150], Step [50/354], Loss: 1.2718, Acc: 59.62%
Epoch [66/150], Step [50/354], Loss: 1.2718, Acc: 59.62%
Epoch [66/150], Step [100/354], Loss: 1.6432, Acc: 58.91%
Epoch [66/150], Step [100/354], Loss: 1.6432, Acc: 58.91%
Epoch [66/150], Step [150/354], Loss: 1.4733, Acc: 58.48%
Epoch [66/150], Step [150/354], Loss: 1.4733, Acc: 58.48%
Epoch [66/150], Step [200/354], Loss: 1.2442, Acc: 58.70%
Epoch [66/150], Step [200/354], Loss: 1.2442, Acc: 58.70%
Epoch [66/150], Step [250/354], Loss: 1.0518, Acc: 58.98%
Epoch [66/150], Step [250/354], Loss: 1.0518, Acc: 58.98%
Epoch [66/150], Step [300/354], Loss: 1.3403, Acc: 59.21%
Epoch [66/150], Step [300/354], Loss: 1.3403, Acc: 59.21%
Epoch [66/150], Step [350/354], Loss: 1.1503, Acc: 58.92%
Epoch [66/150], Step [350/354], Loss: 1.1503, Acc: 58.92%

================================================================================
Época [66/150] Completada
================================================================================
Train Loss: 1.3217 | Train Acc: 58.98%
Test Loss:  1.4613 | Test Acc:  59.89%
Gap (Overfitting): -0.91%
Mejor Test Acc hasta ahora: 60.95% (época 65)
Épocas sin mejora: 1/15
Learning Rate actual: 1.00e-04
Tiempo de época: 280.14s
================================================================================


================================================================================
Época [66/150] Completada
================================================================================
Train Loss: 1.3217 | Train Acc: 58.98%
Test Loss:  1.4613 | Test Acc:  59.89%
Gap (Overfitting): -0.91%
Mejor Test Acc hasta ahora: 60.95% (época 65)
Épocas sin mejora: 1/15
Learning Rate actual: 1.00e-04
Tiempo de época: 280.14s
================================================================================

Epoch [67/150], Step [50/354], Loss: 1.0636, Acc: 58.62%
Epoch [67/150], Step [50/354], Loss: 1.0636, Acc: 58.62%
Epoch [67/150], Step [100/354], Loss: 1.6746, Acc: 59.78%
Epoch [67/150], Step [100/354], Loss: 1.6746, Acc: 59.78%
Epoch [67/150], Step [150/354], Loss: 0.9985, Acc: 59.73%
Epoch [67/150], Step [150/354], Loss: 0.9985, Acc: 59.73%
Epoch [67/150], Step [200/354], Loss: 1.2055, Acc: 59.70%
Epoch [67/150], Step [200/354], Loss: 1.2055, Acc: 59.70%
Epoch [67/150], Step [250/354], Loss: 1.5471, Acc: 59.60%
Epoch [67/150], Step [250/354], Loss: 1.5471, Acc: 59.60%
Epoch [67/150], Step [300/354], Loss: 1.6871, Acc: 59.42%
Epoch [67/150], Step [300/354], Loss: 1.6871, Acc: 59.42%
Epoch [67/150], Step [350/354], Loss: 1.3090, Acc: 59.59%
Epoch [67/150], Step [350/354], Loss: 1.3090, Acc: 59.59%

================================================================================
Época [67/150] Completada
================================================================================
Train Loss: 1.3162 | Train Acc: 59.57%
Test Loss:  1.5064 | Test Acc:  60.95%
Gap (Overfitting): -1.38%
Mejor Test Acc hasta ahora: 60.95% (época 65)
Épocas sin mejora: 2/15
Learning Rate actual: 1.00e-04
Tiempo de época: 284.80s
================================================================================


================================================================================
Época [67/150] Completada
================================================================================
Train Loss: 1.3162 | Train Acc: 59.57%
Test Loss:  1.5064 | Test Acc:  60.95%
Gap (Overfitting): -1.38%
Mejor Test Acc hasta ahora: 60.95% (época 65)
Épocas sin mejora: 2/15
Learning Rate actual: 1.00e-04
Tiempo de época: 284.80s
================================================================================

Epoch [68/150], Step [50/354], Loss: 1.2731, Acc: 62.62%
Epoch [68/150], Step [50/354], Loss: 1.2731, Acc: 62.62%
Epoch [68/150], Step [100/354], Loss: 1.6915, Acc: 60.78%
Epoch [68/150], Step [100/354], Loss: 1.6915, Acc: 60.78%
Epoch [68/150], Step [150/354], Loss: 1.2762, Acc: 60.98%
Epoch [68/150], Step [150/354], Loss: 1.2762, Acc: 60.98%
Epoch [68/150], Step [200/354], Loss: 1.1980, Acc: 60.70%
Epoch [68/150], Step [200/354], Loss: 1.1980, Acc: 60.70%
Epoch [68/150], Step [250/354], Loss: 1.4731, Acc: 60.52%
Epoch [68/150], Step [250/354], Loss: 1.4731, Acc: 60.52%
Epoch [68/150], Step [300/354], Loss: 1.4986, Acc: 60.44%
Epoch [68/150], Step [300/354], Loss: 1.4986, Acc: 60.44%
Epoch [68/150], Step [350/354], Loss: 1.7693, Acc: 60.36%
Epoch [68/150], Step [350/354], Loss: 1.7693, Acc: 60.36%

================================================================================
Época [68/150] Completada
================================================================================
Train Loss: 1.2976 | Train Acc: 60.35%
Test Loss:  1.5370 | Test Acc:  58.69%
Gap (Overfitting): 1.66%
Mejor Test Acc hasta ahora: 60.95% (época 65)
Épocas sin mejora: 3/15
Learning Rate actual: 1.00e-04
Tiempo de época: 305.42s
================================================================================


================================================================================
Época [68/150] Completada
================================================================================
Train Loss: 1.2976 | Train Acc: 60.35%
Test Loss:  1.5370 | Test Acc:  58.69%
Gap (Overfitting): 1.66%
Mejor Test Acc hasta ahora: 60.95% (época 65)
Épocas sin mejora: 3/15
Learning Rate actual: 1.00e-04
Tiempo de época: 305.42s
================================================================================

Epoch [69/150], Step [50/354], Loss: 1.3446, Acc: 60.12%
Epoch [69/150], Step [50/354], Loss: 1.3446, Acc: 60.12%
Epoch [69/150], Step [100/354], Loss: 0.7121, Acc: 60.16%
Epoch [69/150], Step [100/354], Loss: 0.7121, Acc: 60.16%
Epoch [69/150], Step [150/354], Loss: 1.3961, Acc: 60.00%
Epoch [69/150], Step [150/354], Loss: 1.3961, Acc: 60.00%
Epoch [69/150], Step [200/354], Loss: 1.3596, Acc: 59.81%
Epoch [69/150], Step [200/354], Loss: 1.3596, Acc: 59.81%
Epoch [69/150], Step [250/354], Loss: 1.2280, Acc: 60.61%
Epoch [69/150], Step [250/354], Loss: 1.2280, Acc: 60.61%
Epoch [69/150], Step [300/354], Loss: 1.0645, Acc: 60.50%
Epoch [69/150], Step [300/354], Loss: 1.0645, Acc: 60.50%
Epoch [69/150], Step [350/354], Loss: 1.5294, Acc: 60.46%
Epoch [69/150], Step [350/354], Loss: 1.5294, Acc: 60.46%

================================================================================
Época [69/150] Completada
================================================================================
Train Loss: 1.2909 | Train Acc: 60.47%
Test Loss:  1.5230 | Test Acc:  59.89%
Gap (Overfitting): 0.58%
Mejor Test Acc hasta ahora: 60.95% (época 65)
Épocas sin mejora: 4/15
Learning Rate actual: 1.00e-04
Tiempo de época: 294.85s
================================================================================


================================================================================
Época [69/150] Completada
================================================================================
Train Loss: 1.2909 | Train Acc: 60.47%
Test Loss:  1.5230 | Test Acc:  59.89%
Gap (Overfitting): 0.58%
Mejor Test Acc hasta ahora: 60.95% (época 65)
Épocas sin mejora: 4/15
Learning Rate actual: 1.00e-04
Tiempo de época: 294.85s
================================================================================

Epoch [70/150], Step [50/354], Loss: 1.1290, Acc: 59.19%
Epoch [70/150], Step [50/354], Loss: 1.1290, Acc: 59.19%
Epoch [70/150], Step [100/354], Loss: 1.4880, Acc: 59.91%
Epoch [70/150], Step [100/354], Loss: 1.4880, Acc: 59.91%
Epoch [70/150], Step [150/354], Loss: 1.2289, Acc: 60.67%
Epoch [70/150], Step [150/354], Loss: 1.2289, Acc: 60.67%
Epoch [70/150], Step [200/354], Loss: 1.5577, Acc: 60.23%
Epoch [70/150], Step [200/354], Loss: 1.5577, Acc: 60.23%
Epoch [70/150], Step [250/354], Loss: 1.0563, Acc: 60.34%
Epoch [70/150], Step [250/354], Loss: 1.0563, Acc: 60.34%
Epoch [70/150], Step [300/354], Loss: 1.0629, Acc: 60.41%
Epoch [70/150], Step [300/354], Loss: 1.0629, Acc: 60.41%
Epoch [70/150], Step [350/354], Loss: 1.5480, Acc: 60.01%
Epoch [70/150], Step [350/354], Loss: 1.5480, Acc: 60.01%
✓ Nuevo mejor modelo guardado: Test Acc = 61.70% (época 70)

================================================================================
Época [70/150] Completada
================================================================================
Train Loss: 1.3105 | Train Acc: 60.00%
Test Loss:  1.4026 | Test Acc:  61.70%
Gap (Overfitting): -1.70%
Mejor Test Acc hasta ahora: 61.70% (época 70)
Épocas sin mejora: 0/15
Learning Rate actual: 1.00e-04
Tiempo de época: 305.70s
================================================================================

✓ Nuevo mejor modelo guardado: Test Acc = 61.70% (época 70)

================================================================================
Época [70/150] Completada
================================================================================
Train Loss: 1.3105 | Train Acc: 60.00%
Test Loss:  1.4026 | Test Acc:  61.70%
Gap (Overfitting): -1.70%
Mejor Test Acc hasta ahora: 61.70% (época 70)
Épocas sin mejora: 0/15
Learning Rate actual: 1.00e-04
Tiempo de época: 305.70s
================================================================================

Epoch [71/150], Step [50/354], Loss: 1.6430, Acc: 61.12%
Epoch [71/150], Step [50/354], Loss: 1.6430, Acc: 61.12%
Epoch [71/150], Step [100/354], Loss: 1.5039, Acc: 60.88%
Epoch [71/150], Step [100/354], Loss: 1.5039, Acc: 60.88%
Epoch [71/150], Step [150/354], Loss: 1.7950, Acc: 60.58%
Epoch [71/150], Step [150/354], Loss: 1.7950, Acc: 60.58%
Epoch [71/150], Step [200/354], Loss: 1.1506, Acc: 61.00%
Epoch [71/150], Step [200/354], Loss: 1.1506, Acc: 61.00%
Epoch [71/150], Step [250/354], Loss: 1.2342, Acc: 60.95%
Epoch [71/150], Step [250/354], Loss: 1.2342, Acc: 60.95%
Epoch [71/150], Step [300/354], Loss: 1.0492, Acc: 60.86%
Epoch [71/150], Step [300/354], Loss: 1.0492, Acc: 60.86%
Epoch [71/150], Step [350/354], Loss: 1.4636, Acc: 60.46%
Epoch [71/150], Step [350/354], Loss: 1.4636, Acc: 60.46%

================================================================================
Época [71/150] Completada
================================================================================
Train Loss: 1.2874 | Train Acc: 60.41%
Test Loss:  1.4230 | Test Acc:  61.06%
Gap (Overfitting): -0.65%
Mejor Test Acc hasta ahora: 61.70% (época 70)
Épocas sin mejora: 1/15
Learning Rate actual: 1.00e-04
Tiempo de época: 248.03s
================================================================================


================================================================================
Época [71/150] Completada
================================================================================
Train Loss: 1.2874 | Train Acc: 60.41%
Test Loss:  1.4230 | Test Acc:  61.06%
Gap (Overfitting): -0.65%
Mejor Test Acc hasta ahora: 61.70% (época 70)
Épocas sin mejora: 1/15
Learning Rate actual: 1.00e-04
Tiempo de época: 248.03s
================================================================================

Epoch [72/150], Step [50/354], Loss: 1.0899, Acc: 61.19%
Epoch [72/150], Step [50/354], Loss: 1.0899, Acc: 61.19%
Epoch [72/150], Step [100/354], Loss: 1.1540, Acc: 60.09%
Epoch [72/150], Step [100/354], Loss: 1.1540, Acc: 60.09%
Epoch [72/150], Step [150/354], Loss: 1.3019, Acc: 60.21%
Epoch [72/150], Step [150/354], Loss: 1.3019, Acc: 60.21%
Epoch [72/150], Step [200/354], Loss: 0.8170, Acc: 60.66%
Epoch [72/150], Step [200/354], Loss: 0.8170, Acc: 60.66%
Epoch [72/150], Step [250/354], Loss: 1.0937, Acc: 60.59%
Epoch [72/150], Step [250/354], Loss: 1.0937, Acc: 60.59%
Epoch [72/150], Step [300/354], Loss: 1.3047, Acc: 60.66%
Epoch [72/150], Step [300/354], Loss: 1.3047, Acc: 60.66%
Epoch [72/150], Step [350/354], Loss: 1.3425, Acc: 60.58%
Epoch [72/150], Step [350/354], Loss: 1.3425, Acc: 60.58%
✓ Nuevo mejor modelo guardado: Test Acc = 61.87% (época 72)

================================================================================
Época [72/150] Completada
================================================================================
Train Loss: 1.2706 | Train Acc: 60.52%
Test Loss:  1.4119 | Test Acc:  61.87%
Gap (Overfitting): -1.36%
Mejor Test Acc hasta ahora: 61.87% (época 72)
Épocas sin mejora: 0/15
Learning Rate actual: 1.00e-04
Tiempo de época: 283.41s
================================================================================

✓ Nuevo mejor modelo guardado: Test Acc = 61.87% (época 72)

================================================================================
Época [72/150] Completada
================================================================================
Train Loss: 1.2706 | Train Acc: 60.52%
Test Loss:  1.4119 | Test Acc:  61.87%
Gap (Overfitting): -1.36%
Mejor Test Acc hasta ahora: 61.87% (época 72)
Épocas sin mejora: 0/15
Learning Rate actual: 1.00e-04
Tiempo de época: 283.41s
================================================================================

Epoch [73/150], Step [50/354], Loss: 1.2551, Acc: 60.81%
Epoch [73/150], Step [50/354], Loss: 1.2551, Acc: 60.81%
Epoch [73/150], Step [100/354], Loss: 1.7369, Acc: 60.91%
Epoch [73/150], Step [100/354], Loss: 1.7369, Acc: 60.91%
Epoch [73/150], Step [150/354], Loss: 1.3374, Acc: 61.71%
Epoch [73/150], Step [150/354], Loss: 1.3374, Acc: 61.71%
Epoch [73/150], Step [200/354], Loss: 1.2079, Acc: 61.84%
Epoch [73/150], Step [200/354], Loss: 1.2079, Acc: 61.84%
Epoch [73/150], Step [250/354], Loss: 1.2148, Acc: 61.21%
Epoch [73/150], Step [250/354], Loss: 1.2148, Acc: 61.21%
Epoch [73/150], Step [300/354], Loss: 1.7590, Acc: 60.73%
Epoch [73/150], Step [300/354], Loss: 1.7590, Acc: 60.73%
Epoch [73/150], Step [350/354], Loss: 1.1569, Acc: 60.59%
Epoch [73/150], Step [350/354], Loss: 1.1569, Acc: 60.59%
✓ Nuevo mejor modelo guardado: Test Acc = 61.94% (época 73)

================================================================================
Época [73/150] Completada
================================================================================
Train Loss: 1.2587 | Train Acc: 60.63%
Test Loss:  1.4314 | Test Acc:  61.94%
Gap (Overfitting): -1.31%
Mejor Test Acc hasta ahora: 61.94% (época 73)
Épocas sin mejora: 0/15
Learning Rate actual: 1.00e-04
Tiempo de época: 293.04s
================================================================================

✓ Nuevo mejor modelo guardado: Test Acc = 61.94% (época 73)

================================================================================
Época [73/150] Completada
================================================================================
Train Loss: 1.2587 | Train Acc: 60.63%
Test Loss:  1.4314 | Test Acc:  61.94%
Gap (Overfitting): -1.31%
Mejor Test Acc hasta ahora: 61.94% (época 73)
Épocas sin mejora: 0/15
Learning Rate actual: 1.00e-04
Tiempo de época: 293.04s
================================================================================

Epoch [74/150], Step [50/354], Loss: 1.1793, Acc: 61.94%
Epoch [74/150], Step [50/354], Loss: 1.1793, Acc: 61.94%
Epoch [74/150], Step [100/354], Loss: 1.7864, Acc: 61.72%
Epoch [74/150], Step [100/354], Loss: 1.7864, Acc: 61.72%
Epoch [74/150], Step [150/354], Loss: 0.7418, Acc: 62.02%
Epoch [74/150], Step [150/354], Loss: 0.7418, Acc: 62.02%
Epoch [74/150], Step [200/354], Loss: 1.0828, Acc: 61.91%
Epoch [74/150], Step [200/354], Loss: 1.0828, Acc: 61.91%
Epoch [74/150], Step [250/354], Loss: 0.9035, Acc: 61.61%
Epoch [74/150], Step [250/354], Loss: 0.9035, Acc: 61.61%
Epoch [74/150], Step [300/354], Loss: 1.9955, Acc: 61.57%
Epoch [74/150], Step [300/354], Loss: 1.9955, Acc: 61.57%
Epoch [74/150], Step [350/354], Loss: 1.3232, Acc: 61.55%
Epoch [74/150], Step [350/354], Loss: 1.3232, Acc: 61.55%

================================================================================
Época [74/150] Completada
================================================================================
Train Loss: 1.2603 | Train Acc: 61.54%
Test Loss:  1.4158 | Test Acc:  61.55%
Gap (Overfitting): -0.01%
Mejor Test Acc hasta ahora: 61.94% (época 73)
Épocas sin mejora: 1/15
Learning Rate actual: 5.00e-05
Tiempo de época: 276.05s
================================================================================


================================================================================
Época [74/150] Completada
================================================================================
Train Loss: 1.2603 | Train Acc: 61.54%
Test Loss:  1.4158 | Test Acc:  61.55%
Gap (Overfitting): -0.01%
Mejor Test Acc hasta ahora: 61.94% (época 73)
Épocas sin mejora: 1/15
Learning Rate actual: 5.00e-05
Tiempo de época: 276.05s
================================================================================

Epoch [75/150], Step [50/354], Loss: 0.8686, Acc: 65.31%
Epoch [75/150], Step [50/354], Loss: 0.8686, Acc: 65.31%
Epoch [75/150], Step [100/354], Loss: 1.4177, Acc: 65.06%
Epoch [75/150], Step [100/354], Loss: 1.4177, Acc: 65.06%
Epoch [75/150], Step [150/354], Loss: 0.9928, Acc: 65.29%
Epoch [75/150], Step [150/354], Loss: 0.9928, Acc: 65.29%
Epoch [75/150], Step [200/354], Loss: 1.2230, Acc: 64.89%
Epoch [75/150], Step [200/354], Loss: 1.2230, Acc: 64.89%
Epoch [75/150], Step [250/354], Loss: 1.2856, Acc: 64.65%
Epoch [75/150], Step [250/354], Loss: 1.2856, Acc: 64.65%
Epoch [75/150], Step [300/354], Loss: 1.1562, Acc: 64.31%
Epoch [75/150], Step [300/354], Loss: 1.1562, Acc: 64.31%
Epoch [75/150], Step [350/354], Loss: 1.5696, Acc: 64.38%
Epoch [75/150], Step [350/354], Loss: 1.5696, Acc: 64.38%
✓ Nuevo mejor modelo guardado: Test Acc = 62.97% (época 75)

================================================================================
Época [75/150] Completada
================================================================================
Train Loss: 1.1574 | Train Acc: 64.37%
Test Loss:  1.3484 | Test Acc:  62.97%
Gap (Overfitting): 1.40%
Mejor Test Acc hasta ahora: 62.97% (época 75)
Épocas sin mejora: 0/15
Learning Rate actual: 5.00e-05
Tiempo de época: 282.37s
================================================================================

✓ Nuevo mejor modelo guardado: Test Acc = 62.97% (época 75)

================================================================================
Época [75/150] Completada
================================================================================
Train Loss: 1.1574 | Train Acc: 64.37%
Test Loss:  1.3484 | Test Acc:  62.97%
Gap (Overfitting): 1.40%
Mejor Test Acc hasta ahora: 62.97% (época 75)
Épocas sin mejora: 0/15
Learning Rate actual: 5.00e-05
Tiempo de época: 282.37s
================================================================================

Epoch [76/150], Step [50/354], Loss: 1.3819, Acc: 64.19%
Epoch [76/150], Step [50/354], Loss: 1.3819, Acc: 64.19%
Epoch [76/150], Step [100/354], Loss: 1.4340, Acc: 65.34%
Epoch [76/150], Step [100/354], Loss: 1.4340, Acc: 65.34%
Epoch [76/150], Step [150/354], Loss: 1.4940, Acc: 64.65%
Epoch [76/150], Step [150/354], Loss: 1.4940, Acc: 64.65%
Epoch [76/150], Step [200/354], Loss: 1.1907, Acc: 64.66%
Epoch [76/150], Step [200/354], Loss: 1.1907, Acc: 64.66%
Epoch [76/150], Step [250/354], Loss: 1.1859, Acc: 65.21%
Epoch [76/150], Step [250/354], Loss: 1.1859, Acc: 65.21%
Epoch [76/150], Step [300/354], Loss: 1.0201, Acc: 65.06%
Epoch [76/150], Step [300/354], Loss: 1.0201, Acc: 65.06%
Epoch [76/150], Step [350/354], Loss: 1.2185, Acc: 65.45%
Epoch [76/150], Step [350/354], Loss: 1.2185, Acc: 65.45%
✓ Nuevo mejor modelo guardado: Test Acc = 63.43% (época 76)

================================================================================
Época [76/150] Completada
================================================================================
Train Loss: 1.1109 | Train Acc: 65.40%
Test Loss:  1.3866 | Test Acc:  63.43%
Gap (Overfitting): 1.98%
Mejor Test Acc hasta ahora: 63.43% (época 76)
Épocas sin mejora: 0/15
Learning Rate actual: 5.00e-05
Tiempo de época: 297.30s
================================================================================

✓ Nuevo mejor modelo guardado: Test Acc = 63.43% (época 76)

================================================================================
Época [76/150] Completada
================================================================================
Train Loss: 1.1109 | Train Acc: 65.40%
Test Loss:  1.3866 | Test Acc:  63.43%
Gap (Overfitting): 1.98%
Mejor Test Acc hasta ahora: 63.43% (época 76)
Épocas sin mejora: 0/15
Learning Rate actual: 5.00e-05
Tiempo de época: 297.30s
================================================================================

Epoch [77/150], Step [50/354], Loss: 1.3668, Acc: 67.62%
Epoch [77/150], Step [50/354], Loss: 1.3668, Acc: 67.62%
Epoch [77/150], Step [100/354], Loss: 1.2615, Acc: 66.44%
Epoch [77/150], Step [100/354], Loss: 1.2615, Acc: 66.44%
Epoch [77/150], Step [150/354], Loss: 1.0988, Acc: 66.29%
Epoch [77/150], Step [150/354], Loss: 1.0988, Acc: 66.29%
Epoch [77/150], Step [200/354], Loss: 0.9324, Acc: 65.92%
Epoch [77/150], Step [200/354], Loss: 0.9324, Acc: 65.92%
Epoch [77/150], Step [250/354], Loss: 1.2476, Acc: 65.54%
Epoch [77/150], Step [250/354], Loss: 1.2476, Acc: 65.54%
Epoch [77/150], Step [300/354], Loss: 1.1756, Acc: 64.94%
Epoch [77/150], Step [300/354], Loss: 1.1756, Acc: 64.94%
Epoch [77/150], Step [350/354], Loss: 1.1553, Acc: 65.08%
Epoch [77/150], Step [350/354], Loss: 1.1553, Acc: 65.08%
✓ Nuevo mejor modelo guardado: Test Acc = 64.20% (época 77)

================================================================================
Época [77/150] Completada
================================================================================
Train Loss: 1.1219 | Train Acc: 65.10%
Test Loss:  1.3512 | Test Acc:  64.20%
Gap (Overfitting): 0.90%
Mejor Test Acc hasta ahora: 64.20% (época 77)
Épocas sin mejora: 0/15
Learning Rate actual: 5.00e-05
Tiempo de época: 331.54s
================================================================================

✓ Nuevo mejor modelo guardado: Test Acc = 64.20% (época 77)

================================================================================
Época [77/150] Completada
================================================================================
Train Loss: 1.1219 | Train Acc: 65.10%
Test Loss:  1.3512 | Test Acc:  64.20%
Gap (Overfitting): 0.90%
Mejor Test Acc hasta ahora: 64.20% (época 77)
Épocas sin mejora: 0/15
Learning Rate actual: 5.00e-05
Tiempo de época: 331.54s
================================================================================

Epoch [78/150], Step [50/354], Loss: 1.1338, Acc: 66.06%
Epoch [78/150], Step [50/354], Loss: 1.1338, Acc: 66.06%
Epoch [78/150], Step [100/354], Loss: 1.3387, Acc: 66.03%
Epoch [78/150], Step [100/354], Loss: 1.3387, Acc: 66.03%
Epoch [78/150], Step [150/354], Loss: 1.0223, Acc: 66.27%
Epoch [78/150], Step [150/354], Loss: 1.0223, Acc: 66.27%
Epoch [78/150], Step [200/354], Loss: 1.1392, Acc: 66.12%
Epoch [78/150], Step [200/354], Loss: 1.1392, Acc: 66.12%
Epoch [78/150], Step [250/354], Loss: 1.2037, Acc: 65.81%
Epoch [78/150], Step [250/354], Loss: 1.2037, Acc: 65.81%
Epoch [78/150], Step [300/354], Loss: 1.1940, Acc: 65.52%
Epoch [78/150], Step [300/354], Loss: 1.1940, Acc: 65.52%
Epoch [78/150], Step [350/354], Loss: 1.2723, Acc: 65.25%
Epoch [78/150], Step [350/354], Loss: 1.2723, Acc: 65.25%

================================================================================
Época [78/150] Completada
================================================================================
Train Loss: 1.1179 | Train Acc: 65.25%
Test Loss:  1.4018 | Test Acc:  63.78%
Gap (Overfitting): 1.47%
Mejor Test Acc hasta ahora: 64.20% (época 77)
Épocas sin mejora: 1/15
Learning Rate actual: 5.00e-05
Tiempo de época: 340.70s
================================================================================


================================================================================
Época [78/150] Completada
================================================================================
Train Loss: 1.1179 | Train Acc: 65.25%
Test Loss:  1.4018 | Test Acc:  63.78%
Gap (Overfitting): 1.47%
Mejor Test Acc hasta ahora: 64.20% (época 77)
Épocas sin mejora: 1/15
Learning Rate actual: 5.00e-05
Tiempo de época: 340.70s
================================================================================

Epoch [79/150], Step [50/354], Loss: 1.3165, Acc: 67.19%
Epoch [79/150], Step [50/354], Loss: 1.3165, Acc: 67.19%
Epoch [79/150], Step [100/354], Loss: 1.1640, Acc: 66.59%
Epoch [79/150], Step [100/354], Loss: 1.1640, Acc: 66.59%
Epoch [79/150], Step [150/354], Loss: 1.4773, Acc: 65.88%
Epoch [79/150], Step [150/354], Loss: 1.4773, Acc: 65.88%
Epoch [79/150], Step [200/354], Loss: 0.8662, Acc: 65.78%
Epoch [79/150], Step [200/354], Loss: 0.8662, Acc: 65.78%
Epoch [79/150], Step [250/354], Loss: 1.3187, Acc: 65.64%
Epoch [79/150], Step [250/354], Loss: 1.3187, Acc: 65.64%
Epoch [79/150], Step [300/354], Loss: 1.4122, Acc: 65.83%
Epoch [79/150], Step [300/354], Loss: 1.4122, Acc: 65.83%
Epoch [79/150], Step [350/354], Loss: 1.3037, Acc: 65.94%
Epoch [79/150], Step [350/354], Loss: 1.3037, Acc: 65.94%
✓ Nuevo mejor modelo guardado: Test Acc = 64.59% (época 79)

================================================================================
Época [79/150] Completada
================================================================================
Train Loss: 1.0901 | Train Acc: 65.89%
Test Loss:  1.3477 | Test Acc:  64.59%
Gap (Overfitting): 1.30%
Mejor Test Acc hasta ahora: 64.59% (época 79)
Épocas sin mejora: 0/15
Learning Rate actual: 5.00e-05
Tiempo de época: 337.70s
================================================================================

✓ Nuevo mejor modelo guardado: Test Acc = 64.59% (época 79)

================================================================================
Época [79/150] Completada
================================================================================
Train Loss: 1.0901 | Train Acc: 65.89%
Test Loss:  1.3477 | Test Acc:  64.59%
Gap (Overfitting): 1.30%
Mejor Test Acc hasta ahora: 64.59% (época 79)
Épocas sin mejora: 0/15
Learning Rate actual: 5.00e-05
Tiempo de época: 337.70s
================================================================================

Epoch [80/150], Step [50/354], Loss: 0.8106, Acc: 66.81%
Epoch [80/150], Step [50/354], Loss: 0.8106, Acc: 66.81%
Epoch [80/150], Step [100/354], Loss: 1.2303, Acc: 66.53%
Epoch [80/150], Step [100/354], Loss: 1.2303, Acc: 66.53%
Epoch [80/150], Step [150/354], Loss: 1.6490, Acc: 66.15%
Epoch [80/150], Step [150/354], Loss: 1.6490, Acc: 66.15%
Epoch [80/150], Step [200/354], Loss: 1.4966, Acc: 66.22%
Epoch [80/150], Step [200/354], Loss: 1.4966, Acc: 66.22%
Epoch [80/150], Step [250/354], Loss: 1.2388, Acc: 66.31%
Epoch [80/150], Step [250/354], Loss: 1.2388, Acc: 66.31%
Epoch [80/150], Step [300/354], Loss: 0.7990, Acc: 66.11%
Epoch [80/150], Step [300/354], Loss: 0.7990, Acc: 66.11%
Epoch [80/150], Step [350/354], Loss: 1.0249, Acc: 66.12%
Epoch [80/150], Step [350/354], Loss: 1.0249, Acc: 66.12%

================================================================================
Época [80/150] Completada
================================================================================
Train Loss: 1.0904 | Train Acc: 66.07%
Test Loss:  1.3936 | Test Acc:  63.00%
Gap (Overfitting): 3.07%
Mejor Test Acc hasta ahora: 64.59% (época 79)
Épocas sin mejora: 1/15
Learning Rate actual: 5.00e-05
Tiempo de época: 360.41s
================================================================================


================================================================================
Época [80/150] Completada
================================================================================
Train Loss: 1.0904 | Train Acc: 66.07%
Test Loss:  1.3936 | Test Acc:  63.00%
Gap (Overfitting): 3.07%
Mejor Test Acc hasta ahora: 64.59% (época 79)
Épocas sin mejora: 1/15
Learning Rate actual: 5.00e-05
Tiempo de época: 360.41s
================================================================================

Epoch [81/150], Step [50/354], Loss: 0.6588, Acc: 67.31%
Epoch [81/150], Step [50/354], Loss: 0.6588, Acc: 67.31%
Epoch [81/150], Step [100/354], Loss: 1.2840, Acc: 66.81%
Epoch [81/150], Step [100/354], Loss: 1.2840, Acc: 66.81%
Epoch [81/150], Step [150/354], Loss: 0.9222, Acc: 65.92%
Epoch [81/150], Step [150/354], Loss: 0.9222, Acc: 65.92%
Epoch [81/150], Step [200/354], Loss: 0.7977, Acc: 66.39%
Epoch [81/150], Step [200/354], Loss: 0.7977, Acc: 66.39%
Epoch [81/150], Step [250/354], Loss: 1.3105, Acc: 65.99%
Epoch [81/150], Step [250/354], Loss: 1.3105, Acc: 65.99%
Epoch [81/150], Step [300/354], Loss: 0.8053, Acc: 65.73%
Epoch [81/150], Step [300/354], Loss: 0.8053, Acc: 65.73%
Epoch [81/150], Step [350/354], Loss: 0.9687, Acc: 65.90%
Epoch [81/150], Step [350/354], Loss: 0.9687, Acc: 65.90%

================================================================================
Época [81/150] Completada
================================================================================
Train Loss: 1.0856 | Train Acc: 65.93%
Test Loss:  1.4668 | Test Acc:  62.51%
Gap (Overfitting): 3.42%
Mejor Test Acc hasta ahora: 64.59% (época 79)
Épocas sin mejora: 2/15
Learning Rate actual: 5.00e-05
Tiempo de época: 359.41s
================================================================================


================================================================================
Época [81/150] Completada
================================================================================
Train Loss: 1.0856 | Train Acc: 65.93%
Test Loss:  1.4668 | Test Acc:  62.51%
Gap (Overfitting): 3.42%
Mejor Test Acc hasta ahora: 64.59% (época 79)
Épocas sin mejora: 2/15
Learning Rate actual: 5.00e-05
Tiempo de época: 359.41s
================================================================================

Epoch [82/150], Step [50/354], Loss: 1.2395, Acc: 64.06%
Epoch [82/150], Step [50/354], Loss: 1.2395, Acc: 64.06%
Epoch [82/150], Step [100/354], Loss: 1.1583, Acc: 65.22%
Epoch [82/150], Step [100/354], Loss: 1.1583, Acc: 65.22%
Epoch [82/150], Step [150/354], Loss: 1.0424, Acc: 65.52%
Epoch [82/150], Step [150/354], Loss: 1.0424, Acc: 65.52%
Epoch [82/150], Step [200/354], Loss: 1.0367, Acc: 65.73%
Epoch [82/150], Step [200/354], Loss: 1.0367, Acc: 65.73%
Epoch [82/150], Step [250/354], Loss: 1.5992, Acc: 65.61%
Epoch [82/150], Step [250/354], Loss: 1.5992, Acc: 65.61%
Epoch [82/150], Step [300/354], Loss: 1.2803, Acc: 66.10%
Epoch [82/150], Step [300/354], Loss: 1.2803, Acc: 66.10%
Epoch [82/150], Step [350/354], Loss: 1.2089, Acc: 66.02%
Epoch [82/150], Step [350/354], Loss: 1.2089, Acc: 66.02%

================================================================================
Época [82/150] Completada
================================================================================
Train Loss: 1.0801 | Train Acc: 66.04%
Test Loss:  1.4224 | Test Acc:  63.11%
Gap (Overfitting): 2.93%
Mejor Test Acc hasta ahora: 64.59% (época 79)
Épocas sin mejora: 3/15
Learning Rate actual: 5.00e-05
Tiempo de época: 337.40s
================================================================================


================================================================================
Época [82/150] Completada
================================================================================
Train Loss: 1.0801 | Train Acc: 66.04%
Test Loss:  1.4224 | Test Acc:  63.11%
Gap (Overfitting): 2.93%
Mejor Test Acc hasta ahora: 64.59% (época 79)
Épocas sin mejora: 3/15
Learning Rate actual: 5.00e-05
Tiempo de época: 337.40s
================================================================================

Epoch [83/150], Step [50/354], Loss: 0.9766, Acc: 66.56%
Epoch [83/150], Step [50/354], Loss: 0.9766, Acc: 66.56%
Epoch [83/150], Step [100/354], Loss: 0.8466, Acc: 66.53%
Epoch [83/150], Step [100/354], Loss: 0.8466, Acc: 66.53%
Epoch [83/150], Step [150/354], Loss: 1.2883, Acc: 66.48%
Epoch [83/150], Step [150/354], Loss: 1.2883, Acc: 66.48%
Epoch [83/150], Step [200/354], Loss: 1.1579, Acc: 66.53%
Epoch [83/150], Step [200/354], Loss: 1.1579, Acc: 66.53%
Epoch [83/150], Step [250/354], Loss: 1.5780, Acc: 66.34%
Epoch [83/150], Step [250/354], Loss: 1.5780, Acc: 66.34%
Epoch [83/150], Step [300/354], Loss: 0.9889, Acc: 66.46%
Epoch [83/150], Step [300/354], Loss: 0.9889, Acc: 66.46%
Epoch [83/150], Step [350/354], Loss: 1.2784, Acc: 66.60%
Epoch [83/150], Step [350/354], Loss: 1.2784, Acc: 66.60%

================================================================================
Época [83/150] Completada
================================================================================
Train Loss: 1.0736 | Train Acc: 66.62%
Test Loss:  1.4610 | Test Acc:  63.32%
Gap (Overfitting): 3.30%
Mejor Test Acc hasta ahora: 64.59% (época 79)
Épocas sin mejora: 4/15
Learning Rate actual: 5.00e-05
Tiempo de época: 325.81s
================================================================================


================================================================================
Época [83/150] Completada
================================================================================
Train Loss: 1.0736 | Train Acc: 66.62%
Test Loss:  1.4610 | Test Acc:  63.32%
Gap (Overfitting): 3.30%
Mejor Test Acc hasta ahora: 64.59% (época 79)
Épocas sin mejora: 4/15
Learning Rate actual: 5.00e-05
Tiempo de época: 325.81s
================================================================================

Epoch [84/150], Step [50/354], Loss: 1.3281, Acc: 66.88%
Epoch [84/150], Step [50/354], Loss: 1.3281, Acc: 66.88%
Epoch [84/150], Step [100/354], Loss: 0.9993, Acc: 67.38%
Epoch [84/150], Step [100/354], Loss: 0.9993, Acc: 67.38%
Epoch [84/150], Step [150/354], Loss: 0.8213, Acc: 67.65%
Epoch [84/150], Step [150/354], Loss: 0.8213, Acc: 67.65%
Epoch [84/150], Step [200/354], Loss: 0.7475, Acc: 67.58%
Epoch [84/150], Step [200/354], Loss: 0.7475, Acc: 67.58%
Epoch [84/150], Step [250/354], Loss: 1.5039, Acc: 66.92%
Epoch [84/150], Step [250/354], Loss: 1.5039, Acc: 66.92%
Epoch [84/150], Step [300/354], Loss: 1.2217, Acc: 66.45%
Epoch [84/150], Step [300/354], Loss: 1.2217, Acc: 66.45%
Epoch [84/150], Step [350/354], Loss: 1.0152, Acc: 66.49%
Epoch [84/150], Step [350/354], Loss: 1.0152, Acc: 66.49%

================================================================================
Época [84/150] Completada
================================================================================
Train Loss: 1.0692 | Train Acc: 66.53%
Test Loss:  1.4904 | Test Acc:  63.60%
Gap (Overfitting): 2.92%
Mejor Test Acc hasta ahora: 64.59% (época 79)
Épocas sin mejora: 5/15
Learning Rate actual: 5.00e-05
Tiempo de época: 324.65s
================================================================================


================================================================================
Época [84/150] Completada
================================================================================
Train Loss: 1.0692 | Train Acc: 66.53%
Test Loss:  1.4904 | Test Acc:  63.60%
Gap (Overfitting): 2.92%
Mejor Test Acc hasta ahora: 64.59% (época 79)
Épocas sin mejora: 5/15
Learning Rate actual: 5.00e-05
Tiempo de época: 324.65s
================================================================================

Epoch [85/150], Step [50/354], Loss: 0.7642, Acc: 67.25%
Epoch [85/150], Step [50/354], Loss: 0.7642, Acc: 67.25%
Epoch [85/150], Step [100/354], Loss: 0.9123, Acc: 67.09%
Epoch [85/150], Step [100/354], Loss: 0.9123, Acc: 67.09%
Epoch [85/150], Step [150/354], Loss: 0.8742, Acc: 66.58%
Epoch [85/150], Step [150/354], Loss: 0.8742, Acc: 66.58%
Epoch [85/150], Step [200/354], Loss: 0.8979, Acc: 66.73%
Epoch [85/150], Step [200/354], Loss: 0.8979, Acc: 66.73%
Epoch [85/150], Step [250/354], Loss: 1.1315, Acc: 66.74%
Epoch [85/150], Step [250/354], Loss: 1.1315, Acc: 66.74%
Epoch [85/150], Step [300/354], Loss: 1.4617, Acc: 66.85%
Epoch [85/150], Step [300/354], Loss: 1.4617, Acc: 66.85%
Epoch [85/150], Step [350/354], Loss: 0.7968, Acc: 66.69%
Epoch [85/150], Step [350/354], Loss: 0.7968, Acc: 66.69%

================================================================================
Época [85/150] Completada
================================================================================
Train Loss: 1.0567 | Train Acc: 66.67%
Test Loss:  1.4593 | Test Acc:  63.04%
Gap (Overfitting): 3.63%
Mejor Test Acc hasta ahora: 64.59% (época 79)
Épocas sin mejora: 6/15
Learning Rate actual: 5.00e-05
Tiempo de época: 328.76s
================================================================================


================================================================================
Época [85/150] Completada
================================================================================
Train Loss: 1.0567 | Train Acc: 66.67%
Test Loss:  1.4593 | Test Acc:  63.04%
Gap (Overfitting): 3.63%
Mejor Test Acc hasta ahora: 64.59% (época 79)
Épocas sin mejora: 6/15
Learning Rate actual: 5.00e-05
Tiempo de época: 328.76s
================================================================================

Epoch [86/150], Step [50/354], Loss: 0.6419, Acc: 67.12%
Epoch [86/150], Step [50/354], Loss: 0.6419, Acc: 67.12%
Epoch [86/150], Step [100/354], Loss: 0.9229, Acc: 66.81%
Epoch [86/150], Step [100/354], Loss: 0.9229, Acc: 66.81%
Epoch [86/150], Step [150/354], Loss: 0.9135, Acc: 67.42%
Epoch [86/150], Step [150/354], Loss: 0.9135, Acc: 67.42%
Epoch [86/150], Step [200/354], Loss: 0.9722, Acc: 67.16%
Epoch [86/150], Step [200/354], Loss: 0.9722, Acc: 67.16%
Epoch [86/150], Step [250/354], Loss: 0.7472, Acc: 67.26%
Epoch [86/150], Step [250/354], Loss: 0.7472, Acc: 67.26%
Epoch [86/150], Step [300/354], Loss: 0.9481, Acc: 67.01%
Epoch [86/150], Step [300/354], Loss: 0.9481, Acc: 67.01%
Epoch [86/150], Step [350/354], Loss: 0.9863, Acc: 66.87%
Epoch [86/150], Step [350/354], Loss: 0.9863, Acc: 66.87%

================================================================================
Época [86/150] Completada
================================================================================
Train Loss: 1.0541 | Train Acc: 66.89%
Test Loss:  1.4011 | Test Acc:  64.31%
Gap (Overfitting): 2.58%
Mejor Test Acc hasta ahora: 64.59% (época 79)
Épocas sin mejora: 7/15
Learning Rate actual: 5.00e-05
Tiempo de época: 328.61s
================================================================================


================================================================================
Época [86/150] Completada
================================================================================
Train Loss: 1.0541 | Train Acc: 66.89%
Test Loss:  1.4011 | Test Acc:  64.31%
Gap (Overfitting): 2.58%
Mejor Test Acc hasta ahora: 64.59% (época 79)
Épocas sin mejora: 7/15
Learning Rate actual: 5.00e-05
Tiempo de época: 328.61s
================================================================================

Epoch [87/150], Step [50/354], Loss: 0.9831, Acc: 67.75%
Epoch [87/150], Step [50/354], Loss: 0.9831, Acc: 67.75%
Epoch [87/150], Step [100/354], Loss: 0.7534, Acc: 67.06%
Epoch [87/150], Step [100/354], Loss: 0.7534, Acc: 67.06%
Epoch [87/150], Step [150/354], Loss: 1.1691, Acc: 66.92%
Epoch [87/150], Step [150/354], Loss: 1.1691, Acc: 66.92%
Epoch [87/150], Step [200/354], Loss: 0.8822, Acc: 67.41%
Epoch [87/150], Step [200/354], Loss: 0.8822, Acc: 67.41%
Epoch [87/150], Step [250/354], Loss: 1.2250, Acc: 67.36%
Epoch [87/150], Step [250/354], Loss: 1.2250, Acc: 67.36%
Epoch [87/150], Step [300/354], Loss: 1.1183, Acc: 67.53%
Epoch [87/150], Step [300/354], Loss: 1.1183, Acc: 67.53%
Epoch [87/150], Step [350/354], Loss: 0.9487, Acc: 67.49%
Epoch [87/150], Step [350/354], Loss: 0.9487, Acc: 67.49%

================================================================================
Época [87/150] Completada
================================================================================
Train Loss: 1.0387 | Train Acc: 67.51%
Test Loss:  1.4436 | Test Acc:  63.75%
Gap (Overfitting): 3.76%
Mejor Test Acc hasta ahora: 64.59% (época 79)
Épocas sin mejora: 8/15
Learning Rate actual: 5.00e-05
Tiempo de época: 328.57s
================================================================================


================================================================================
Época [87/150] Completada
================================================================================
Train Loss: 1.0387 | Train Acc: 67.51%
Test Loss:  1.4436 | Test Acc:  63.75%
Gap (Overfitting): 3.76%
Mejor Test Acc hasta ahora: 64.59% (época 79)
Épocas sin mejora: 8/15
Learning Rate actual: 5.00e-05
Tiempo de época: 328.57s
================================================================================

Epoch [88/150], Step [50/354], Loss: 0.9355, Acc: 66.31%
Epoch [88/150], Step [50/354], Loss: 0.9355, Acc: 66.31%
Epoch [88/150], Step [100/354], Loss: 1.1670, Acc: 67.66%
Epoch [88/150], Step [100/354], Loss: 1.1670, Acc: 67.66%
Epoch [88/150], Step [150/354], Loss: 0.8753, Acc: 67.69%
Epoch [88/150], Step [150/354], Loss: 0.8753, Acc: 67.69%
Epoch [88/150], Step [200/354], Loss: 1.4988, Acc: 67.67%
Epoch [88/150], Step [200/354], Loss: 1.4988, Acc: 67.67%
Epoch [88/150], Step [250/354], Loss: 0.8394, Acc: 67.64%
Epoch [88/150], Step [250/354], Loss: 0.8394, Acc: 67.64%
Epoch [88/150], Step [300/354], Loss: 1.3035, Acc: 67.51%
Epoch [88/150], Step [300/354], Loss: 1.3035, Acc: 67.51%
Epoch [88/150], Step [350/354], Loss: 1.1779, Acc: 67.32%
Epoch [88/150], Step [350/354], Loss: 1.1779, Acc: 67.32%

================================================================================
Época [88/150] Completada
================================================================================
Train Loss: 1.0479 | Train Acc: 67.33%
Test Loss:  1.4319 | Test Acc:  63.99%
Gap (Overfitting): 3.34%
Mejor Test Acc hasta ahora: 64.59% (época 79)
Épocas sin mejora: 9/15
Learning Rate actual: 2.50e-05
Tiempo de época: 328.38s
================================================================================


================================================================================
Época [88/150] Completada
================================================================================
Train Loss: 1.0479 | Train Acc: 67.33%
Test Loss:  1.4319 | Test Acc:  63.99%
Gap (Overfitting): 3.34%
Mejor Test Acc hasta ahora: 64.59% (época 79)
Épocas sin mejora: 9/15
Learning Rate actual: 2.50e-05
Tiempo de época: 328.38s
================================================================================

Epoch [89/150], Step [50/354], Loss: 0.9859, Acc: 69.19%
Epoch [89/150], Step [50/354], Loss: 0.9859, Acc: 69.19%
Epoch [89/150], Step [100/354], Loss: 0.7799, Acc: 68.97%
Epoch [89/150], Step [100/354], Loss: 0.7799, Acc: 68.97%
Epoch [89/150], Step [150/354], Loss: 0.9367, Acc: 69.31%
Epoch [89/150], Step [150/354], Loss: 0.9367, Acc: 69.31%
Epoch [89/150], Step [200/354], Loss: 1.6326, Acc: 69.62%
Epoch [89/150], Step [200/354], Loss: 1.6326, Acc: 69.62%
Epoch [89/150], Step [250/354], Loss: 0.8756, Acc: 69.60%
Epoch [89/150], Step [250/354], Loss: 0.8756, Acc: 69.60%
Epoch [89/150], Step [300/354], Loss: 1.0996, Acc: 69.74%
Epoch [89/150], Step [300/354], Loss: 1.0996, Acc: 69.74%
Epoch [89/150], Step [350/354], Loss: 0.9485, Acc: 69.68%
Epoch [89/150], Step [350/354], Loss: 0.9485, Acc: 69.68%

================================================================================
Época [89/150] Completada
================================================================================
Train Loss: 0.9775 | Train Acc: 69.65%
Test Loss:  1.4163 | Test Acc:  64.20%
Gap (Overfitting): 5.45%
Mejor Test Acc hasta ahora: 64.59% (época 79)
Épocas sin mejora: 10/15
Learning Rate actual: 2.50e-05
Tiempo de época: 327.99s
================================================================================


================================================================================
Época [89/150] Completada
================================================================================
Train Loss: 0.9775 | Train Acc: 69.65%
Test Loss:  1.4163 | Test Acc:  64.20%
Gap (Overfitting): 5.45%
Mejor Test Acc hasta ahora: 64.59% (época 79)
Épocas sin mejora: 10/15
Learning Rate actual: 2.50e-05
Tiempo de época: 327.99s
================================================================================

Epoch [90/150], Step [50/354], Loss: 1.2807, Acc: 67.38%
Epoch [90/150], Step [50/354], Loss: 1.2807, Acc: 67.38%
Epoch [90/150], Step [100/354], Loss: 0.8725, Acc: 68.91%
Epoch [90/150], Step [100/354], Loss: 0.8725, Acc: 68.91%
Epoch [90/150], Step [150/354], Loss: 0.9740, Acc: 69.29%
Epoch [90/150], Step [150/354], Loss: 0.9740, Acc: 69.29%
Epoch [90/150], Step [200/354], Loss: 0.6306, Acc: 69.70%
Epoch [90/150], Step [200/354], Loss: 0.6306, Acc: 69.70%
Epoch [90/150], Step [250/354], Loss: 1.1141, Acc: 69.59%
Epoch [90/150], Step [250/354], Loss: 1.1141, Acc: 69.59%
Epoch [90/150], Step [300/354], Loss: 1.2651, Acc: 69.90%
Epoch [90/150], Step [300/354], Loss: 1.2651, Acc: 69.90%
Epoch [90/150], Step [350/354], Loss: 1.2867, Acc: 69.79%
Epoch [90/150], Step [350/354], Loss: 1.2867, Acc: 69.79%

================================================================================
Época [90/150] Completada
================================================================================
Train Loss: 0.9653 | Train Acc: 69.79%
Test Loss:  1.4137 | Test Acc:  64.56%
Gap (Overfitting): 5.23%
Mejor Test Acc hasta ahora: 64.59% (época 79)
Épocas sin mejora: 11/15
Learning Rate actual: 2.50e-05
Tiempo de época: 328.23s
================================================================================


================================================================================
Época [90/150] Completada
================================================================================
Train Loss: 0.9653 | Train Acc: 69.79%
Test Loss:  1.4137 | Test Acc:  64.56%
Gap (Overfitting): 5.23%
Mejor Test Acc hasta ahora: 64.59% (época 79)
Épocas sin mejora: 11/15
Learning Rate actual: 2.50e-05
Tiempo de época: 328.23s
================================================================================

Epoch [91/150], Step [50/354], Loss: 1.4938, Acc: 68.62%
Epoch [91/150], Step [50/354], Loss: 1.4938, Acc: 68.62%
Epoch [91/150], Step [100/354], Loss: 1.1614, Acc: 70.06%
Epoch [91/150], Step [100/354], Loss: 1.1614, Acc: 70.06%
Epoch [91/150], Step [150/354], Loss: 0.8372, Acc: 69.52%
Epoch [91/150], Step [150/354], Loss: 0.8372, Acc: 69.52%
Epoch [91/150], Step [200/354], Loss: 1.2504, Acc: 69.34%
Epoch [91/150], Step [200/354], Loss: 1.2504, Acc: 69.34%
Epoch [91/150], Step [250/354], Loss: 0.7935, Acc: 69.39%
Epoch [91/150], Step [250/354], Loss: 0.7935, Acc: 69.39%
Epoch [91/150], Step [300/354], Loss: 1.1373, Acc: 69.49%
Epoch [91/150], Step [300/354], Loss: 1.1373, Acc: 69.49%
Epoch [91/150], Step [350/354], Loss: 1.1304, Acc: 69.31%
Epoch [91/150], Step [350/354], Loss: 1.1304, Acc: 69.31%
✓ Nuevo mejor modelo guardado: Test Acc = 64.88% (época 91)

================================================================================
Época [91/150] Completada
================================================================================
Train Loss: 0.9748 | Train Acc: 69.27%
Test Loss:  1.3901 | Test Acc:  64.88%
Gap (Overfitting): 4.40%
Mejor Test Acc hasta ahora: 64.88% (época 91)
Épocas sin mejora: 0/15
Learning Rate actual: 2.50e-05
Tiempo de época: 325.45s
================================================================================

✓ Nuevo mejor modelo guardado: Test Acc = 64.88% (época 91)

================================================================================
Época [91/150] Completada
================================================================================
Train Loss: 0.9748 | Train Acc: 69.27%
Test Loss:  1.3901 | Test Acc:  64.88%
Gap (Overfitting): 4.40%
Mejor Test Acc hasta ahora: 64.88% (época 91)
Épocas sin mejora: 0/15
Learning Rate actual: 2.50e-05
Tiempo de época: 325.45s
================================================================================

Epoch [92/150], Step [50/354], Loss: 1.0524, Acc: 68.31%
Epoch [92/150], Step [50/354], Loss: 1.0524, Acc: 68.31%
Epoch [92/150], Step [100/354], Loss: 1.0381, Acc: 69.78%
Epoch [92/150], Step [100/354], Loss: 1.0381, Acc: 69.78%
Epoch [92/150], Step [150/354], Loss: 1.1708, Acc: 69.79%
Epoch [92/150], Step [150/354], Loss: 1.1708, Acc: 69.79%
Epoch [92/150], Step [200/354], Loss: 0.7069, Acc: 70.05%
Epoch [92/150], Step [200/354], Loss: 0.7069, Acc: 70.05%
Epoch [92/150], Step [250/354], Loss: 0.9202, Acc: 70.28%
Epoch [92/150], Step [250/354], Loss: 0.9202, Acc: 70.28%
Epoch [92/150], Step [300/354], Loss: 0.8959, Acc: 69.88%
Epoch [92/150], Step [300/354], Loss: 0.8959, Acc: 69.88%
Epoch [92/150], Step [350/354], Loss: 1.1255, Acc: 69.80%
Epoch [92/150], Step [350/354], Loss: 1.1255, Acc: 69.80%
✓ Nuevo mejor modelo guardado: Test Acc = 65.23% (época 92)

================================================================================
Época [92/150] Completada
================================================================================
Train Loss: 0.9563 | Train Acc: 69.79%
Test Loss:  1.4003 | Test Acc:  65.23%
Gap (Overfitting): 4.56%
Mejor Test Acc hasta ahora: 65.23% (época 92)
Épocas sin mejora: 0/15
Learning Rate actual: 2.50e-05
Tiempo de época: 378.15s
================================================================================

✓ Nuevo mejor modelo guardado: Test Acc = 65.23% (época 92)

================================================================================
Época [92/150] Completada
================================================================================
Train Loss: 0.9563 | Train Acc: 69.79%
Test Loss:  1.4003 | Test Acc:  65.23%
Gap (Overfitting): 4.56%
Mejor Test Acc hasta ahora: 65.23% (época 92)
Épocas sin mejora: 0/15
Learning Rate actual: 2.50e-05
Tiempo de época: 378.15s
================================================================================

Epoch [93/150], Step [50/354], Loss: 1.2543, Acc: 69.06%
Epoch [93/150], Step [50/354], Loss: 1.2543, Acc: 69.06%
Epoch [93/150], Step [100/354], Loss: 1.3390, Acc: 69.09%
Epoch [93/150], Step [100/354], Loss: 1.3390, Acc: 69.09%
Epoch [93/150], Step [150/354], Loss: 1.0388, Acc: 69.56%
Epoch [93/150], Step [150/354], Loss: 1.0388, Acc: 69.56%
Epoch [93/150], Step [200/354], Loss: 1.1798, Acc: 69.64%
Epoch [93/150], Step [200/354], Loss: 1.1798, Acc: 69.64%
Epoch [93/150], Step [250/354], Loss: 0.9660, Acc: 69.60%
Epoch [93/150], Step [250/354], Loss: 0.9660, Acc: 69.60%
Epoch [93/150], Step [300/354], Loss: 0.9507, Acc: 69.44%
Epoch [93/150], Step [300/354], Loss: 0.9507, Acc: 69.44%
Epoch [93/150], Step [350/354], Loss: 1.0564, Acc: 69.37%
Epoch [93/150], Step [350/354], Loss: 1.0564, Acc: 69.37%

================================================================================
Época [93/150] Completada
================================================================================
Train Loss: 0.9652 | Train Acc: 69.39%
Test Loss:  1.4353 | Test Acc:  64.10%
Gap (Overfitting): 5.29%
Mejor Test Acc hasta ahora: 65.23% (época 92)
Épocas sin mejora: 1/15
Learning Rate actual: 2.50e-05
Tiempo de época: 358.66s
================================================================================


================================================================================
Época [93/150] Completada
================================================================================
Train Loss: 0.9652 | Train Acc: 69.39%
Test Loss:  1.4353 | Test Acc:  64.10%
Gap (Overfitting): 5.29%
Mejor Test Acc hasta ahora: 65.23% (época 92)
Épocas sin mejora: 1/15
Learning Rate actual: 2.50e-05
Tiempo de época: 358.66s
================================================================================

Epoch [94/150], Step [50/354], Loss: 1.1087, Acc: 72.69%
Epoch [94/150], Step [50/354], Loss: 1.1087, Acc: 72.69%
Epoch [94/150], Step [100/354], Loss: 0.7784, Acc: 71.66%
Epoch [94/150], Step [100/354], Loss: 0.7784, Acc: 71.66%
Epoch [94/150], Step [150/354], Loss: 0.7211, Acc: 70.98%
Epoch [94/150], Step [150/354], Loss: 0.7211, Acc: 70.98%
Epoch [94/150], Step [200/354], Loss: 0.7646, Acc: 70.83%
Epoch [94/150], Step [200/354], Loss: 0.7646, Acc: 70.83%
Epoch [94/150], Step [250/354], Loss: 0.9638, Acc: 70.55%
Epoch [94/150], Step [250/354], Loss: 0.9638, Acc: 70.55%
Epoch [94/150], Step [300/354], Loss: 1.1962, Acc: 70.32%
Epoch [94/150], Step [300/354], Loss: 1.1962, Acc: 70.32%
Epoch [94/150], Step [350/354], Loss: 1.2221, Acc: 70.29%
Epoch [94/150], Step [350/354], Loss: 1.2221, Acc: 70.29%

================================================================================
Época [94/150] Completada
================================================================================
Train Loss: 0.9526 | Train Acc: 70.24%
Test Loss:  1.4002 | Test Acc:  64.91%
Gap (Overfitting): 5.32%
Mejor Test Acc hasta ahora: 65.23% (época 92)
Épocas sin mejora: 2/15
Learning Rate actual: 2.50e-05
Tiempo de época: 357.92s
================================================================================


================================================================================
Época [94/150] Completada
================================================================================
Train Loss: 0.9526 | Train Acc: 70.24%
Test Loss:  1.4002 | Test Acc:  64.91%
Gap (Overfitting): 5.32%
Mejor Test Acc hasta ahora: 65.23% (época 92)
Épocas sin mejora: 2/15
Learning Rate actual: 2.50e-05
Tiempo de época: 357.92s
================================================================================

Epoch [95/150], Step [50/354], Loss: 1.1751, Acc: 69.19%
Epoch [95/150], Step [50/354], Loss: 1.1751, Acc: 69.19%
Epoch [95/150], Step [100/354], Loss: 1.0204, Acc: 69.69%
Epoch [95/150], Step [100/354], Loss: 1.0204, Acc: 69.69%
Epoch [95/150], Step [150/354], Loss: 0.8117, Acc: 69.94%
Epoch [95/150], Step [150/354], Loss: 0.8117, Acc: 69.94%
Epoch [95/150], Step [200/354], Loss: 0.9781, Acc: 70.28%
Epoch [95/150], Step [200/354], Loss: 0.9781, Acc: 70.28%
Epoch [95/150], Step [250/354], Loss: 1.0939, Acc: 70.16%
Epoch [95/150], Step [250/354], Loss: 1.0939, Acc: 70.16%
Epoch [95/150], Step [300/354], Loss: 1.4658, Acc: 70.11%
Epoch [95/150], Step [300/354], Loss: 1.4658, Acc: 70.11%
Epoch [95/150], Step [350/354], Loss: 0.8528, Acc: 70.16%
Epoch [95/150], Step [350/354], Loss: 0.8528, Acc: 70.16%

================================================================================
Época [95/150] Completada
================================================================================
Train Loss: 0.9507 | Train Acc: 70.13%
Test Loss:  1.4155 | Test Acc:  64.35%
Gap (Overfitting): 5.78%
Mejor Test Acc hasta ahora: 65.23% (época 92)
Épocas sin mejora: 3/15
Learning Rate actual: 2.50e-05
Tiempo de época: 373.24s
================================================================================


================================================================================
Época [95/150] Completada
================================================================================
Train Loss: 0.9507 | Train Acc: 70.13%
Test Loss:  1.4155 | Test Acc:  64.35%
Gap (Overfitting): 5.78%
Mejor Test Acc hasta ahora: 65.23% (época 92)
Épocas sin mejora: 3/15
Learning Rate actual: 2.50e-05
Tiempo de época: 373.24s
================================================================================

Epoch [96/150], Step [50/354], Loss: 1.0948, Acc: 71.00%
Epoch [96/150], Step [50/354], Loss: 1.0948, Acc: 71.00%
Epoch [96/150], Step [100/354], Loss: 1.1889, Acc: 70.28%
Epoch [96/150], Step [100/354], Loss: 1.1889, Acc: 70.28%
Epoch [96/150], Step [150/354], Loss: 1.1397, Acc: 70.06%
Epoch [96/150], Step [150/354], Loss: 1.1397, Acc: 70.06%
Epoch [96/150], Step [200/354], Loss: 0.9261, Acc: 70.28%
Epoch [96/150], Step [200/354], Loss: 0.9261, Acc: 70.28%
Epoch [96/150], Step [250/354], Loss: 0.9964, Acc: 70.59%
Epoch [96/150], Step [250/354], Loss: 0.9964, Acc: 70.59%
Epoch [96/150], Step [300/354], Loss: 0.8649, Acc: 70.29%
Epoch [96/150], Step [300/354], Loss: 0.8649, Acc: 70.29%
Epoch [96/150], Step [350/354], Loss: 1.4088, Acc: 70.13%
Epoch [96/150], Step [350/354], Loss: 1.4088, Acc: 70.13%

================================================================================
Época [96/150] Completada
================================================================================
Train Loss: 0.9541 | Train Acc: 70.10%
Test Loss:  1.3896 | Test Acc:  64.73%
Gap (Overfitting): 5.37%
Mejor Test Acc hasta ahora: 65.23% (época 92)
Épocas sin mejora: 4/15
Learning Rate actual: 2.50e-05
Tiempo de época: 365.77s
================================================================================


================================================================================
Época [96/150] Completada
================================================================================
Train Loss: 0.9541 | Train Acc: 70.10%
Test Loss:  1.3896 | Test Acc:  64.73%
Gap (Overfitting): 5.37%
Mejor Test Acc hasta ahora: 65.23% (época 92)
Épocas sin mejora: 4/15
Learning Rate actual: 2.50e-05
Tiempo de época: 365.77s
================================================================================

Epoch [97/150], Step [50/354], Loss: 0.7319, Acc: 71.62%
Epoch [97/150], Step [50/354], Loss: 0.7319, Acc: 71.62%
Epoch [97/150], Step [100/354], Loss: 0.8016, Acc: 71.09%
Epoch [97/150], Step [100/354], Loss: 0.8016, Acc: 71.09%
Epoch [97/150], Step [150/354], Loss: 0.9012, Acc: 70.98%
Epoch [97/150], Step [150/354], Loss: 0.9012, Acc: 70.98%
Epoch [97/150], Step [200/354], Loss: 0.9119, Acc: 71.14%
Epoch [97/150], Step [200/354], Loss: 0.9119, Acc: 71.14%
Epoch [97/150], Step [250/354], Loss: 0.4214, Acc: 70.78%
Epoch [97/150], Step [250/354], Loss: 0.4214, Acc: 70.78%
Epoch [97/150], Step [300/354], Loss: 1.2522, Acc: 70.55%
Epoch [97/150], Step [300/354], Loss: 1.2522, Acc: 70.55%
Epoch [97/150], Step [350/354], Loss: 0.9769, Acc: 70.59%
Epoch [97/150], Step [350/354], Loss: 0.9769, Acc: 70.59%

================================================================================
Época [97/150] Completada
================================================================================
Train Loss: 0.9392 | Train Acc: 70.57%
Test Loss:  1.4262 | Test Acc:  64.56%
Gap (Overfitting): 6.01%
Mejor Test Acc hasta ahora: 65.23% (época 92)
Épocas sin mejora: 5/15
Learning Rate actual: 1.25e-05
Tiempo de época: 330.18s
================================================================================


================================================================================
Época [97/150] Completada
================================================================================
Train Loss: 0.9392 | Train Acc: 70.57%
Test Loss:  1.4262 | Test Acc:  64.56%
Gap (Overfitting): 6.01%
Mejor Test Acc hasta ahora: 65.23% (época 92)
Épocas sin mejora: 5/15
Learning Rate actual: 1.25e-05
Tiempo de época: 330.18s
================================================================================

Epoch [98/150], Step [50/354], Loss: 1.0762, Acc: 71.81%
Epoch [98/150], Step [50/354], Loss: 1.0762, Acc: 71.81%
Epoch [98/150], Step [100/354], Loss: 0.9502, Acc: 70.88%
Epoch [98/150], Step [100/354], Loss: 0.9502, Acc: 70.88%
Epoch [98/150], Step [150/354], Loss: 0.9786, Acc: 71.02%
Epoch [98/150], Step [150/354], Loss: 0.9786, Acc: 71.02%
Epoch [98/150], Step [200/354], Loss: 1.2475, Acc: 71.02%
Epoch [98/150], Step [200/354], Loss: 1.2475, Acc: 71.02%
Epoch [98/150], Step [250/354], Loss: 0.7581, Acc: 71.04%
Epoch [98/150], Step [250/354], Loss: 0.7581, Acc: 71.04%
Epoch [98/150], Step [300/354], Loss: 1.4782, Acc: 71.29%
Epoch [98/150], Step [300/354], Loss: 1.4782, Acc: 71.29%
Epoch [98/150], Step [350/354], Loss: 1.0822, Acc: 71.35%
Epoch [98/150], Step [350/354], Loss: 1.0822, Acc: 71.35%
✓ Nuevo mejor modelo guardado: Test Acc = 65.69% (época 98)

================================================================================
Época [98/150] Completada
================================================================================
Train Loss: 0.9047 | Train Acc: 71.34%
Test Loss:  1.4073 | Test Acc:  65.69%
Gap (Overfitting): 5.65%
Mejor Test Acc hasta ahora: 65.69% (época 98)
Épocas sin mejora: 0/15
Learning Rate actual: 1.25e-05
Tiempo de época: 317.04s
================================================================================

✓ Nuevo mejor modelo guardado: Test Acc = 65.69% (época 98)

================================================================================
Época [98/150] Completada
================================================================================
Train Loss: 0.9047 | Train Acc: 71.34%
Test Loss:  1.4073 | Test Acc:  65.69%
Gap (Overfitting): 5.65%
Mejor Test Acc hasta ahora: 65.69% (época 98)
Épocas sin mejora: 0/15
Learning Rate actual: 1.25e-05
Tiempo de época: 317.04s
================================================================================

Epoch [99/150], Step [50/354], Loss: 0.8116, Acc: 71.75%
Epoch [99/150], Step [50/354], Loss: 0.8116, Acc: 71.75%
Epoch [99/150], Step [100/354], Loss: 1.3653, Acc: 70.81%
Epoch [99/150], Step [100/354], Loss: 1.3653, Acc: 70.81%
Epoch [99/150], Step [150/354], Loss: 0.4502, Acc: 71.40%
Epoch [99/150], Step [150/354], Loss: 0.4502, Acc: 71.40%
Epoch [99/150], Step [200/354], Loss: 0.8433, Acc: 71.25%
Epoch [99/150], Step [200/354], Loss: 0.8433, Acc: 71.25%
Epoch [99/150], Step [250/354], Loss: 1.0374, Acc: 70.92%
Epoch [99/150], Step [250/354], Loss: 1.0374, Acc: 70.92%
Epoch [99/150], Step [300/354], Loss: 0.7866, Acc: 70.98%
Epoch [99/150], Step [300/354], Loss: 0.7866, Acc: 70.98%
Epoch [99/150], Step [350/354], Loss: 0.8870, Acc: 71.05%
Epoch [99/150], Step [350/354], Loss: 0.8870, Acc: 71.05%

================================================================================
Época [99/150] Completada
================================================================================
Train Loss: 0.9015 | Train Acc: 71.00%
Test Loss:  1.4604 | Test Acc:  65.05%
Gap (Overfitting): 5.95%
Mejor Test Acc hasta ahora: 65.69% (época 98)
Épocas sin mejora: 1/15
Learning Rate actual: 1.25e-05
Tiempo de época: 364.99s
================================================================================


================================================================================
Época [99/150] Completada
================================================================================
Train Loss: 0.9015 | Train Acc: 71.00%
Test Loss:  1.4604 | Test Acc:  65.05%
Gap (Overfitting): 5.95%
Mejor Test Acc hasta ahora: 65.69% (época 98)
Épocas sin mejora: 1/15
Learning Rate actual: 1.25e-05
Tiempo de época: 364.99s
================================================================================

Epoch [100/150], Step [50/354], Loss: 0.8607, Acc: 69.81%
Epoch [100/150], Step [50/354], Loss: 0.8607, Acc: 69.81%
Epoch [100/150], Step [100/354], Loss: 0.8310, Acc: 71.78%
Epoch [100/150], Step [100/354], Loss: 0.8310, Acc: 71.78%
Epoch [100/150], Step [150/354], Loss: 0.8309, Acc: 71.90%
Epoch [100/150], Step [150/354], Loss: 0.8309, Acc: 71.90%
Epoch [100/150], Step [200/354], Loss: 1.0613, Acc: 71.92%
Epoch [100/150], Step [200/354], Loss: 1.0613, Acc: 71.92%
Epoch [100/150], Step [250/354], Loss: 0.9627, Acc: 71.66%
Epoch [100/150], Step [250/354], Loss: 0.9627, Acc: 71.66%
Epoch [100/150], Step [300/354], Loss: 0.5141, Acc: 71.60%
Epoch [100/150], Step [300/354], Loss: 0.5141, Acc: 71.60%
Epoch [100/150], Step [350/354], Loss: 0.7285, Acc: 71.64%
Epoch [100/150], Step [350/354], Loss: 0.7285, Acc: 71.64%

================================================================================
Época [100/150] Completada
================================================================================
Train Loss: 0.8966 | Train Acc: 71.64%
Test Loss:  1.4248 | Test Acc:  65.37%
Gap (Overfitting): 6.27%
Mejor Test Acc hasta ahora: 65.69% (época 98)
Épocas sin mejora: 2/15
Learning Rate actual: 1.25e-05
Tiempo de época: 373.78s
================================================================================


================================================================================
Época [100/150] Completada
================================================================================
Train Loss: 0.8966 | Train Acc: 71.64%
Test Loss:  1.4248 | Test Acc:  65.37%
Gap (Overfitting): 6.27%
Mejor Test Acc hasta ahora: 65.69% (época 98)
Épocas sin mejora: 2/15
Learning Rate actual: 1.25e-05
Tiempo de época: 373.78s
================================================================================

Epoch [101/150], Step [50/354], Loss: 0.8163, Acc: 71.31%
Epoch [101/150], Step [50/354], Loss: 0.8163, Acc: 71.31%
Epoch [101/150], Step [100/354], Loss: 1.2625, Acc: 71.88%
Epoch [101/150], Step [100/354], Loss: 1.2625, Acc: 71.88%
Epoch [101/150], Step [150/354], Loss: 1.0201, Acc: 71.27%
Epoch [101/150], Step [150/354], Loss: 1.0201, Acc: 71.27%
Epoch [101/150], Step [200/354], Loss: 0.6036, Acc: 71.75%
Epoch [101/150], Step [200/354], Loss: 0.6036, Acc: 71.75%
Epoch [101/150], Step [250/354], Loss: 0.6519, Acc: 71.75%
Epoch [101/150], Step [250/354], Loss: 0.6519, Acc: 71.75%
Epoch [101/150], Step [300/354], Loss: 0.9507, Acc: 71.68%
Epoch [101/150], Step [300/354], Loss: 0.9507, Acc: 71.68%
Epoch [101/150], Step [350/354], Loss: 0.7671, Acc: 71.50%
Epoch [101/150], Step [350/354], Loss: 0.7671, Acc: 71.50%

================================================================================
Época [101/150] Completada
================================================================================
Train Loss: 0.9035 | Train Acc: 71.47%
Test Loss:  1.4334 | Test Acc:  65.23%
Gap (Overfitting): 6.24%
Mejor Test Acc hasta ahora: 65.69% (época 98)
Épocas sin mejora: 3/15
Learning Rate actual: 1.25e-05
Tiempo de época: 385.98s
================================================================================


================================================================================
Época [101/150] Completada
================================================================================
Train Loss: 0.9035 | Train Acc: 71.47%
Test Loss:  1.4334 | Test Acc:  65.23%
Gap (Overfitting): 6.24%
Mejor Test Acc hasta ahora: 65.69% (época 98)
Épocas sin mejora: 3/15
Learning Rate actual: 1.25e-05
Tiempo de época: 385.98s
================================================================================

Epoch [102/150], Step [50/354], Loss: 1.0898, Acc: 72.81%
Epoch [102/150], Step [50/354], Loss: 1.0898, Acc: 72.81%
Epoch [102/150], Step [100/354], Loss: 0.9129, Acc: 71.81%
Epoch [102/150], Step [100/354], Loss: 0.9129, Acc: 71.81%
Epoch [102/150], Step [150/354], Loss: 0.5976, Acc: 72.10%
Epoch [102/150], Step [150/354], Loss: 0.5976, Acc: 72.10%
Epoch [102/150], Step [200/354], Loss: 0.8662, Acc: 71.92%
Epoch [102/150], Step [200/354], Loss: 0.8662, Acc: 71.92%
Epoch [102/150], Step [250/354], Loss: 1.1250, Acc: 71.81%
Epoch [102/150], Step [250/354], Loss: 1.1250, Acc: 71.81%
Epoch [102/150], Step [300/354], Loss: 0.6207, Acc: 71.82%
Epoch [102/150], Step [300/354], Loss: 0.6207, Acc: 71.82%
Epoch [102/150], Step [350/354], Loss: 1.2679, Acc: 71.49%
Epoch [102/150], Step [350/354], Loss: 1.2679, Acc: 71.49%

================================================================================
Época [102/150] Completada
================================================================================
Train Loss: 0.8987 | Train Acc: 71.50%
Test Loss:  1.4261 | Test Acc:  64.91%
Gap (Overfitting): 6.59%
Mejor Test Acc hasta ahora: 65.69% (época 98)
Épocas sin mejora: 4/15
Learning Rate actual: 1.25e-05
Tiempo de época: 373.32s
================================================================================


================================================================================
Época [102/150] Completada
================================================================================
Train Loss: 0.8987 | Train Acc: 71.50%
Test Loss:  1.4261 | Test Acc:  64.91%
Gap (Overfitting): 6.59%
Mejor Test Acc hasta ahora: 65.69% (época 98)
Épocas sin mejora: 4/15
Learning Rate actual: 1.25e-05
Tiempo de época: 373.32s
================================================================================

Epoch [103/150], Step [50/354], Loss: 1.2112, Acc: 71.25%
Epoch [103/150], Step [50/354], Loss: 1.2112, Acc: 71.25%
Epoch [103/150], Step [100/354], Loss: 0.8673, Acc: 71.50%
Epoch [103/150], Step [100/354], Loss: 0.8673, Acc: 71.50%
Epoch [103/150], Step [150/354], Loss: 0.9748, Acc: 71.62%
Epoch [103/150], Step [150/354], Loss: 0.9748, Acc: 71.62%
Epoch [103/150], Step [200/354], Loss: 0.7866, Acc: 71.62%
Epoch [103/150], Step [200/354], Loss: 0.7866, Acc: 71.62%
Epoch [103/150], Step [250/354], Loss: 0.5627, Acc: 71.78%
Epoch [103/150], Step [250/354], Loss: 0.5627, Acc: 71.78%
Epoch [103/150], Step [300/354], Loss: 1.3061, Acc: 71.88%
Epoch [103/150], Step [300/354], Loss: 1.3061, Acc: 71.88%
Epoch [103/150], Step [350/354], Loss: 0.9131, Acc: 71.76%
Epoch [103/150], Step [350/354], Loss: 0.9131, Acc: 71.76%
✓ Nuevo mejor modelo guardado: Test Acc = 66.15% (época 103)

================================================================================
Época [103/150] Completada
================================================================================
Train Loss: 0.8903 | Train Acc: 71.75%
Test Loss:  1.4137 | Test Acc:  66.15%
Gap (Overfitting): 5.60%
Mejor Test Acc hasta ahora: 66.15% (época 103)
Épocas sin mejora: 0/15
Learning Rate actual: 1.25e-05
Tiempo de época: 396.01s
================================================================================

✓ Nuevo mejor modelo guardado: Test Acc = 66.15% (época 103)

================================================================================
Época [103/150] Completada
================================================================================
Train Loss: 0.8903 | Train Acc: 71.75%
Test Loss:  1.4137 | Test Acc:  66.15%
Gap (Overfitting): 5.60%
Mejor Test Acc hasta ahora: 66.15% (época 103)
Épocas sin mejora: 0/15
Learning Rate actual: 1.25e-05
Tiempo de época: 396.01s
================================================================================

Epoch [104/150], Step [50/354], Loss: 0.6371, Acc: 71.50%
Epoch [104/150], Step [50/354], Loss: 0.6371, Acc: 71.50%
Epoch [104/150], Step [100/354], Loss: 0.7831, Acc: 71.25%
Epoch [104/150], Step [100/354], Loss: 0.7831, Acc: 71.25%
Epoch [104/150], Step [150/354], Loss: 0.7747, Acc: 71.04%
Epoch [104/150], Step [150/354], Loss: 0.7747, Acc: 71.04%
Epoch [104/150], Step [200/354], Loss: 0.7280, Acc: 71.78%
Epoch [104/150], Step [200/354], Loss: 0.7280, Acc: 71.78%
Epoch [104/150], Step [250/354], Loss: 0.9065, Acc: 72.04%
Epoch [104/150], Step [250/354], Loss: 0.9065, Acc: 72.04%
Epoch [104/150], Step [300/354], Loss: 0.9143, Acc: 71.97%
Epoch [104/150], Step [300/354], Loss: 0.9143, Acc: 71.97%
Epoch [104/150], Step [350/354], Loss: 0.6960, Acc: 71.94%
Epoch [104/150], Step [350/354], Loss: 0.6960, Acc: 71.94%

================================================================================
Época [104/150] Completada
================================================================================
Train Loss: 0.8773 | Train Acc: 71.92%
Test Loss:  1.4577 | Test Acc:  65.62%
Gap (Overfitting): 6.30%
Mejor Test Acc hasta ahora: 66.15% (época 103)
Épocas sin mejora: 1/15
Learning Rate actual: 1.25e-05
Tiempo de época: 411.22s
================================================================================


================================================================================
Época [104/150] Completada
================================================================================
Train Loss: 0.8773 | Train Acc: 71.92%
Test Loss:  1.4577 | Test Acc:  65.62%
Gap (Overfitting): 6.30%
Mejor Test Acc hasta ahora: 66.15% (época 103)
Épocas sin mejora: 1/15
Learning Rate actual: 1.25e-05
Tiempo de época: 411.22s
================================================================================

Epoch [105/150], Step [50/354], Loss: 1.1740, Acc: 72.38%
Epoch [105/150], Step [50/354], Loss: 1.1740, Acc: 72.38%
Epoch [105/150], Step [100/354], Loss: 0.8703, Acc: 72.41%
Epoch [105/150], Step [100/354], Loss: 0.8703, Acc: 72.41%
Epoch [105/150], Step [150/354], Loss: 1.1119, Acc: 72.83%
Epoch [105/150], Step [150/354], Loss: 1.1119, Acc: 72.83%
Epoch [105/150], Step [200/354], Loss: 1.0313, Acc: 72.92%
Epoch [105/150], Step [200/354], Loss: 1.0313, Acc: 72.92%
Epoch [105/150], Step [250/354], Loss: 0.9928, Acc: 72.54%
Epoch [105/150], Step [250/354], Loss: 0.9928, Acc: 72.54%
Epoch [105/150], Step [300/354], Loss: 0.5467, Acc: 72.65%
Epoch [105/150], Step [300/354], Loss: 0.5467, Acc: 72.65%
Epoch [105/150], Step [350/354], Loss: 0.8982, Acc: 72.57%
Epoch [105/150], Step [350/354], Loss: 0.8982, Acc: 72.57%
✓ Nuevo mejor modelo guardado: Test Acc = 66.25% (época 105)

================================================================================
Época [105/150] Completada
================================================================================
Train Loss: 0.8724 | Train Acc: 72.55%
Test Loss:  1.4409 | Test Acc:  66.25%
Gap (Overfitting): 6.30%
Mejor Test Acc hasta ahora: 66.25% (época 105)
Épocas sin mejora: 0/15
Learning Rate actual: 1.25e-05
Tiempo de época: 462.32s
================================================================================

✓ Nuevo mejor modelo guardado: Test Acc = 66.25% (época 105)

================================================================================
Época [105/150] Completada
================================================================================
Train Loss: 0.8724 | Train Acc: 72.55%
Test Loss:  1.4409 | Test Acc:  66.25%
Gap (Overfitting): 6.30%
Mejor Test Acc hasta ahora: 66.25% (época 105)
Épocas sin mejora: 0/15
Learning Rate actual: 1.25e-05
Tiempo de época: 462.32s
================================================================================

Epoch [106/150], Step [50/354], Loss: 0.8838, Acc: 72.31%
Epoch [106/150], Step [50/354], Loss: 0.8838, Acc: 72.31%
Epoch [106/150], Step [100/354], Loss: 0.8758, Acc: 72.28%
Epoch [106/150], Step [100/354], Loss: 0.8758, Acc: 72.28%
Epoch [106/150], Step [150/354], Loss: 1.4375, Acc: 72.50%
Epoch [106/150], Step [150/354], Loss: 1.4375, Acc: 72.50%
Epoch [106/150], Step [200/354], Loss: 1.2687, Acc: 72.22%
Epoch [106/150], Step [200/354], Loss: 1.2687, Acc: 72.22%
Epoch [106/150], Step [250/354], Loss: 1.0879, Acc: 72.17%
Epoch [106/150], Step [250/354], Loss: 1.0879, Acc: 72.17%
Epoch [106/150], Step [300/354], Loss: 0.9865, Acc: 72.07%
Epoch [106/150], Step [300/354], Loss: 0.9865, Acc: 72.07%
Epoch [106/150], Step [350/354], Loss: 1.0254, Acc: 72.00%
Epoch [106/150], Step [350/354], Loss: 1.0254, Acc: 72.00%

================================================================================
Época [106/150] Completada
================================================================================
Train Loss: 0.8838 | Train Acc: 72.02%
Test Loss:  1.4284 | Test Acc:  65.87%
Gap (Overfitting): 6.15%
Mejor Test Acc hasta ahora: 66.25% (época 105)
Épocas sin mejora: 1/15
Learning Rate actual: 6.25e-06
Tiempo de época: 436.11s
================================================================================


================================================================================
Época [106/150] Completada
================================================================================
Train Loss: 0.8838 | Train Acc: 72.02%
Test Loss:  1.4284 | Test Acc:  65.87%
Gap (Overfitting): 6.15%
Mejor Test Acc hasta ahora: 66.25% (época 105)
Épocas sin mejora: 1/15
Learning Rate actual: 6.25e-06
Tiempo de época: 436.11s
================================================================================

Epoch [107/150], Step [50/354], Loss: 0.8029, Acc: 72.81%
Epoch [107/150], Step [50/354], Loss: 0.8029, Acc: 72.81%
Epoch [107/150], Step [100/354], Loss: 0.7167, Acc: 72.41%
Epoch [107/150], Step [100/354], Loss: 0.7167, Acc: 72.41%
Epoch [107/150], Step [150/354], Loss: 0.6412, Acc: 72.83%
Epoch [107/150], Step [150/354], Loss: 0.6412, Acc: 72.83%
Epoch [107/150], Step [200/354], Loss: 0.5097, Acc: 72.52%
Epoch [107/150], Step [200/354], Loss: 0.5097, Acc: 72.52%
Epoch [107/150], Step [250/354], Loss: 0.6053, Acc: 72.66%
Epoch [107/150], Step [250/354], Loss: 0.6053, Acc: 72.66%
Epoch [107/150], Step [300/354], Loss: 0.8788, Acc: 72.81%
Epoch [107/150], Step [300/354], Loss: 0.8788, Acc: 72.81%
Epoch [107/150], Step [350/354], Loss: 1.0878, Acc: 72.95%
Epoch [107/150], Step [350/354], Loss: 1.0878, Acc: 72.95%

================================================================================
Época [107/150] Completada
================================================================================
Train Loss: 0.8527 | Train Acc: 72.92%
Test Loss:  1.4187 | Test Acc:  66.22%
Gap (Overfitting): 6.70%
Mejor Test Acc hasta ahora: 66.25% (época 105)
Épocas sin mejora: 2/15
Learning Rate actual: 6.25e-06
Tiempo de época: 375.35s
================================================================================


================================================================================
Época [107/150] Completada
================================================================================
Train Loss: 0.8527 | Train Acc: 72.92%
Test Loss:  1.4187 | Test Acc:  66.22%
Gap (Overfitting): 6.70%
Mejor Test Acc hasta ahora: 66.25% (época 105)
Épocas sin mejora: 2/15
Learning Rate actual: 6.25e-06
Tiempo de época: 375.35s
================================================================================

Epoch [108/150], Step [50/354], Loss: 1.2741, Acc: 71.62%
Epoch [108/150], Step [50/354], Loss: 1.2741, Acc: 71.62%
Epoch [108/150], Step [100/354], Loss: 0.8213, Acc: 71.75%
Epoch [108/150], Step [100/354], Loss: 0.8213, Acc: 71.75%
Epoch [108/150], Step [150/354], Loss: 0.7291, Acc: 72.15%
Epoch [108/150], Step [150/354], Loss: 0.7291, Acc: 72.15%
Epoch [108/150], Step [200/354], Loss: 1.0495, Acc: 72.33%
Epoch [108/150], Step [200/354], Loss: 1.0495, Acc: 72.33%
Epoch [108/150], Step [250/354], Loss: 0.6934, Acc: 72.46%
Epoch [108/150], Step [250/354], Loss: 0.6934, Acc: 72.46%
Epoch [108/150], Step [300/354], Loss: 1.0547, Acc: 72.18%
Epoch [108/150], Step [300/354], Loss: 1.0547, Acc: 72.18%
Epoch [108/150], Step [350/354], Loss: 0.7569, Acc: 72.34%
Epoch [108/150], Step [350/354], Loss: 0.7569, Acc: 72.34%
✓ Nuevo mejor modelo guardado: Test Acc = 66.40% (época 108)

================================================================================
Época [108/150] Completada
================================================================================
Train Loss: 0.8750 | Train Acc: 72.27%
Test Loss:  1.4121 | Test Acc:  66.40%
Gap (Overfitting): 5.87%
Mejor Test Acc hasta ahora: 66.40% (época 108)
Épocas sin mejora: 0/15
Learning Rate actual: 6.25e-06
Tiempo de época: 390.86s
================================================================================

✓ Nuevo mejor modelo guardado: Test Acc = 66.40% (época 108)

================================================================================
Época [108/150] Completada
================================================================================
Train Loss: 0.8750 | Train Acc: 72.27%
Test Loss:  1.4121 | Test Acc:  66.40%
Gap (Overfitting): 5.87%
Mejor Test Acc hasta ahora: 66.40% (época 108)
Épocas sin mejora: 0/15
Learning Rate actual: 6.25e-06
Tiempo de época: 390.86s
================================================================================

Epoch [109/150], Step [50/354], Loss: 1.3472, Acc: 73.69%
Epoch [109/150], Step [50/354], Loss: 1.3472, Acc: 73.69%
Epoch [109/150], Step [100/354], Loss: 0.7373, Acc: 73.16%
Epoch [109/150], Step [100/354], Loss: 0.7373, Acc: 73.16%
Epoch [109/150], Step [150/354], Loss: 0.9954, Acc: 72.67%
Epoch [109/150], Step [150/354], Loss: 0.9954, Acc: 72.67%
Epoch [109/150], Step [200/354], Loss: 0.6702, Acc: 72.58%
Epoch [109/150], Step [200/354], Loss: 0.6702, Acc: 72.58%
Epoch [109/150], Step [250/354], Loss: 0.8180, Acc: 72.95%
Epoch [109/150], Step [250/354], Loss: 0.8180, Acc: 72.95%
Epoch [109/150], Step [300/354], Loss: 0.8558, Acc: 72.55%
Epoch [109/150], Step [300/354], Loss: 0.8558, Acc: 72.55%
Epoch [109/150], Step [350/354], Loss: 0.4740, Acc: 72.71%
Epoch [109/150], Step [350/354], Loss: 0.4740, Acc: 72.71%

================================================================================
Época [109/150] Completada
================================================================================
Train Loss: 0.8607 | Train Acc: 72.70%
Test Loss:  1.4165 | Test Acc:  66.01%
Gap (Overfitting): 6.69%
Mejor Test Acc hasta ahora: 66.40% (época 108)
Épocas sin mejora: 1/15
Learning Rate actual: 6.25e-06
Tiempo de época: 206.19s
================================================================================


================================================================================
Época [109/150] Completada
================================================================================
Train Loss: 0.8607 | Train Acc: 72.70%
Test Loss:  1.4165 | Test Acc:  66.01%
Gap (Overfitting): 6.69%
Mejor Test Acc hasta ahora: 66.40% (época 108)
Épocas sin mejora: 1/15
Learning Rate actual: 6.25e-06
Tiempo de época: 206.19s
================================================================================

Epoch [110/150], Step [50/354], Loss: 0.6684, Acc: 71.50%
Epoch [110/150], Step [50/354], Loss: 0.6684, Acc: 71.50%
Epoch [110/150], Step [100/354], Loss: 1.1085, Acc: 72.34%
Epoch [110/150], Step [100/354], Loss: 1.1085, Acc: 72.34%
Epoch [110/150], Step [150/354], Loss: 0.8336, Acc: 72.83%
Epoch [110/150], Step [150/354], Loss: 0.8336, Acc: 72.83%
Epoch [110/150], Step [200/354], Loss: 0.7812, Acc: 72.92%
Epoch [110/150], Step [200/354], Loss: 0.7812, Acc: 72.92%
Epoch [110/150], Step [250/354], Loss: 0.8908, Acc: 72.59%
Epoch [110/150], Step [250/354], Loss: 0.8908, Acc: 72.59%
Epoch [110/150], Step [300/354], Loss: 0.7313, Acc: 72.59%
Epoch [110/150], Step [300/354], Loss: 0.7313, Acc: 72.59%
Epoch [110/150], Step [350/354], Loss: 0.9235, Acc: 72.51%
Epoch [110/150], Step [350/354], Loss: 0.9235, Acc: 72.51%

================================================================================
Época [110/150] Completada
================================================================================
Train Loss: 0.8503 | Train Acc: 72.54%
Test Loss:  1.4170 | Test Acc:  66.08%
Gap (Overfitting): 6.46%
Mejor Test Acc hasta ahora: 66.40% (época 108)
Épocas sin mejora: 2/15
Learning Rate actual: 6.25e-06
Tiempo de época: 242.86s
================================================================================


================================================================================
Época [110/150] Completada
================================================================================
Train Loss: 0.8503 | Train Acc: 72.54%
Test Loss:  1.4170 | Test Acc:  66.08%
Gap (Overfitting): 6.46%
Mejor Test Acc hasta ahora: 66.40% (época 108)
Épocas sin mejora: 2/15
Learning Rate actual: 6.25e-06
Tiempo de época: 242.86s
================================================================================

Epoch [111/150], Step [50/354], Loss: 0.8847, Acc: 73.38%
Epoch [111/150], Step [50/354], Loss: 0.8847, Acc: 73.38%
Epoch [111/150], Step [100/354], Loss: 0.5311, Acc: 73.19%
Epoch [111/150], Step [100/354], Loss: 0.5311, Acc: 73.19%
Epoch [111/150], Step [150/354], Loss: 0.7282, Acc: 72.62%
Epoch [111/150], Step [150/354], Loss: 0.7282, Acc: 72.62%
Epoch [111/150], Step [200/354], Loss: 0.5751, Acc: 72.78%
Epoch [111/150], Step [200/354], Loss: 0.5751, Acc: 72.78%
Epoch [111/150], Step [250/354], Loss: 0.6590, Acc: 72.66%
Epoch [111/150], Step [250/354], Loss: 0.6590, Acc: 72.66%
Epoch [111/150], Step [300/354], Loss: 1.1995, Acc: 72.66%
Epoch [111/150], Step [300/354], Loss: 1.1995, Acc: 72.66%
Epoch [111/150], Step [350/354], Loss: 1.2467, Acc: 72.59%
Epoch [111/150], Step [350/354], Loss: 1.2467, Acc: 72.59%

================================================================================
Época [111/150] Completada
================================================================================
Train Loss: 0.8548 | Train Acc: 72.65%
Test Loss:  1.4195 | Test Acc:  66.22%
Gap (Overfitting): 6.43%
Mejor Test Acc hasta ahora: 66.40% (época 108)
Épocas sin mejora: 3/15
Learning Rate actual: 6.25e-06
Tiempo de época: 263.89s
================================================================================


================================================================================
Época [111/150] Completada
================================================================================
Train Loss: 0.8548 | Train Acc: 72.65%
Test Loss:  1.4195 | Test Acc:  66.22%
Gap (Overfitting): 6.43%
Mejor Test Acc hasta ahora: 66.40% (época 108)
Épocas sin mejora: 3/15
Learning Rate actual: 6.25e-06
Tiempo de época: 263.89s
================================================================================

Epoch [112/150], Step [50/354], Loss: 1.2159, Acc: 73.19%
Epoch [112/150], Step [50/354], Loss: 1.2159, Acc: 73.19%
Epoch [112/150], Step [100/354], Loss: 0.5990, Acc: 73.72%
Epoch [112/150], Step [100/354], Loss: 0.5990, Acc: 73.72%
Epoch [112/150], Step [150/354], Loss: 0.5871, Acc: 73.62%
Epoch [112/150], Step [150/354], Loss: 0.5871, Acc: 73.62%
Epoch [112/150], Step [200/354], Loss: 0.7269, Acc: 73.06%
Epoch [112/150], Step [200/354], Loss: 0.7269, Acc: 73.06%
Epoch [112/150], Step [250/354], Loss: 0.5426, Acc: 73.00%
Epoch [112/150], Step [250/354], Loss: 0.5426, Acc: 73.00%
Epoch [112/150], Step [300/354], Loss: 0.9942, Acc: 72.82%
Epoch [112/150], Step [300/354], Loss: 0.9942, Acc: 72.82%
Epoch [112/150], Step [350/354], Loss: 0.5657, Acc: 72.62%
Epoch [112/150], Step [350/354], Loss: 0.5657, Acc: 72.62%

================================================================================
Época [112/150] Completada
================================================================================
Train Loss: 0.8679 | Train Acc: 72.52%
Test Loss:  1.4019 | Test Acc:  66.01%
Gap (Overfitting): 6.52%
Mejor Test Acc hasta ahora: 66.40% (época 108)
Épocas sin mejora: 4/15
Learning Rate actual: 6.25e-06
Tiempo de época: 241.91s
================================================================================


================================================================================
Época [112/150] Completada
================================================================================
Train Loss: 0.8679 | Train Acc: 72.52%
Test Loss:  1.4019 | Test Acc:  66.01%
Gap (Overfitting): 6.52%
Mejor Test Acc hasta ahora: 66.40% (época 108)
Épocas sin mejora: 4/15
Learning Rate actual: 6.25e-06
Tiempo de época: 241.91s
================================================================================

Epoch [113/150], Step [50/354], Loss: 0.7278, Acc: 74.12%
Epoch [113/150], Step [50/354], Loss: 0.7278, Acc: 74.12%
Epoch [113/150], Step [100/354], Loss: 1.1593, Acc: 73.62%
Epoch [113/150], Step [100/354], Loss: 1.1593, Acc: 73.62%
Epoch [113/150], Step [150/354], Loss: 1.1424, Acc: 73.62%
Epoch [113/150], Step [150/354], Loss: 1.1424, Acc: 73.62%
Epoch [113/150], Step [200/354], Loss: 0.9995, Acc: 73.00%
Epoch [113/150], Step [200/354], Loss: 0.9995, Acc: 73.00%
Epoch [113/150], Step [250/354], Loss: 0.8393, Acc: 73.03%
Epoch [113/150], Step [250/354], Loss: 0.8393, Acc: 73.03%
Epoch [113/150], Step [300/354], Loss: 1.0133, Acc: 73.38%
Epoch [113/150], Step [300/354], Loss: 1.0133, Acc: 73.38%
Epoch [113/150], Step [350/354], Loss: 1.1170, Acc: 73.18%
Epoch [113/150], Step [350/354], Loss: 1.1170, Acc: 73.18%

================================================================================
Época [113/150] Completada
================================================================================
Train Loss: 0.8456 | Train Acc: 73.17%
Test Loss:  1.4236 | Test Acc:  66.25%
Gap (Overfitting): 6.91%
Mejor Test Acc hasta ahora: 66.40% (época 108)
Épocas sin mejora: 5/15
Learning Rate actual: 6.25e-06
Tiempo de época: 239.64s
================================================================================


================================================================================
Época [113/150] Completada
================================================================================
Train Loss: 0.8456 | Train Acc: 73.17%
Test Loss:  1.4236 | Test Acc:  66.25%
Gap (Overfitting): 6.91%
Mejor Test Acc hasta ahora: 66.40% (época 108)
Épocas sin mejora: 5/15
Learning Rate actual: 6.25e-06
Tiempo de época: 239.64s
================================================================================

Epoch [114/150], Step [50/354], Loss: 1.1887, Acc: 73.75%
Epoch [114/150], Step [50/354], Loss: 1.1887, Acc: 73.75%
Epoch [114/150], Step [100/354], Loss: 0.7362, Acc: 72.91%
Epoch [114/150], Step [100/354], Loss: 0.7362, Acc: 72.91%
Epoch [114/150], Step [150/354], Loss: 1.0265, Acc: 73.25%
Epoch [114/150], Step [150/354], Loss: 1.0265, Acc: 73.25%
Epoch [114/150], Step [200/354], Loss: 1.1324, Acc: 73.33%
Epoch [114/150], Step [200/354], Loss: 1.1324, Acc: 73.33%
Epoch [114/150], Step [250/354], Loss: 1.0447, Acc: 73.46%
Epoch [114/150], Step [250/354], Loss: 1.0447, Acc: 73.46%
Epoch [114/150], Step [300/354], Loss: 0.4568, Acc: 73.25%
Epoch [114/150], Step [300/354], Loss: 0.4568, Acc: 73.25%
Epoch [114/150], Step [350/354], Loss: 0.8598, Acc: 73.47%
Epoch [114/150], Step [350/354], Loss: 0.8598, Acc: 73.47%
✓ Nuevo mejor modelo guardado: Test Acc = 66.57% (época 114)

================================================================================
Época [114/150] Completada
================================================================================
Train Loss: 0.8474 | Train Acc: 73.58%
Test Loss:  1.4262 | Test Acc:  66.57%
Gap (Overfitting): 7.01%
Mejor Test Acc hasta ahora: 66.57% (época 114)
Épocas sin mejora: 0/15
Learning Rate actual: 6.25e-06
Tiempo de época: 249.77s
================================================================================

✓ Nuevo mejor modelo guardado: Test Acc = 66.57% (época 114)

================================================================================
Época [114/150] Completada
================================================================================
Train Loss: 0.8474 | Train Acc: 73.58%
Test Loss:  1.4262 | Test Acc:  66.57%
Gap (Overfitting): 7.01%
Mejor Test Acc hasta ahora: 66.57% (época 114)
Épocas sin mejora: 0/15
Learning Rate actual: 6.25e-06
Tiempo de época: 249.77s
================================================================================

Epoch [115/150], Step [50/354], Loss: 1.0122, Acc: 73.56%
Epoch [115/150], Step [50/354], Loss: 1.0122, Acc: 73.56%
Epoch [115/150], Step [100/354], Loss: 1.1845, Acc: 73.19%
Epoch [115/150], Step [100/354], Loss: 1.1845, Acc: 73.19%
Epoch [115/150], Step [150/354], Loss: 0.7597, Acc: 73.06%
Epoch [115/150], Step [150/354], Loss: 0.7597, Acc: 73.06%
Epoch [115/150], Step [200/354], Loss: 1.0988, Acc: 72.86%
Epoch [115/150], Step [200/354], Loss: 1.0988, Acc: 72.86%
Epoch [115/150], Step [250/354], Loss: 0.8826, Acc: 72.61%
Epoch [115/150], Step [250/354], Loss: 0.8826, Acc: 72.61%
Epoch [115/150], Step [300/354], Loss: 0.6574, Acc: 72.73%
Epoch [115/150], Step [300/354], Loss: 0.6574, Acc: 72.73%
Epoch [115/150], Step [350/354], Loss: 0.4311, Acc: 73.03%
Epoch [115/150], Step [350/354], Loss: 0.4311, Acc: 73.03%

================================================================================
Época [115/150] Completada
================================================================================
Train Loss: 0.8516 | Train Acc: 73.00%
Test Loss:  1.4370 | Test Acc:  66.08%
Gap (Overfitting): 6.92%
Mejor Test Acc hasta ahora: 66.57% (época 114)
Épocas sin mejora: 1/15
Learning Rate actual: 3.13e-06
Tiempo de época: 233.07s
================================================================================


================================================================================
Época [115/150] Completada
================================================================================
Train Loss: 0.8516 | Train Acc: 73.00%
Test Loss:  1.4370 | Test Acc:  66.08%
Gap (Overfitting): 6.92%
Mejor Test Acc hasta ahora: 66.57% (época 114)
Épocas sin mejora: 1/15
Learning Rate actual: 3.13e-06
Tiempo de época: 233.07s
================================================================================

Epoch [116/150], Step [50/354], Loss: 0.5462, Acc: 74.12%
Epoch [116/150], Step [50/354], Loss: 0.5462, Acc: 74.12%
Epoch [116/150], Step [100/354], Loss: 0.5244, Acc: 74.22%
Epoch [116/150], Step [100/354], Loss: 0.5244, Acc: 74.22%
Epoch [116/150], Step [150/354], Loss: 0.8285, Acc: 73.38%
Epoch [116/150], Step [150/354], Loss: 0.8285, Acc: 73.38%
Epoch [116/150], Step [200/354], Loss: 1.0315, Acc: 72.88%
Epoch [116/150], Step [200/354], Loss: 1.0315, Acc: 72.88%
Epoch [116/150], Step [250/354], Loss: 0.6569, Acc: 72.92%
Epoch [116/150], Step [250/354], Loss: 0.6569, Acc: 72.92%
Epoch [116/150], Step [300/354], Loss: 1.3847, Acc: 73.20%
Epoch [116/150], Step [300/354], Loss: 1.3847, Acc: 73.20%
Epoch [116/150], Step [350/354], Loss: 1.5360, Acc: 73.41%
Epoch [116/150], Step [350/354], Loss: 1.5360, Acc: 73.41%

================================================================================
Época [116/150] Completada
================================================================================
Train Loss: 0.8548 | Train Acc: 73.41%
Test Loss:  1.4406 | Test Acc:  66.47%
Gap (Overfitting): 6.94%
Mejor Test Acc hasta ahora: 66.57% (época 114)
Épocas sin mejora: 2/15
Learning Rate actual: 3.13e-06
Tiempo de época: 242.47s
================================================================================


================================================================================
Época [116/150] Completada
================================================================================
Train Loss: 0.8548 | Train Acc: 73.41%
Test Loss:  1.4406 | Test Acc:  66.47%
Gap (Overfitting): 6.94%
Mejor Test Acc hasta ahora: 66.57% (época 114)
Épocas sin mejora: 2/15
Learning Rate actual: 3.13e-06
Tiempo de época: 242.47s
================================================================================

Epoch [117/150], Step [50/354], Loss: 0.9551, Acc: 73.12%
Epoch [117/150], Step [50/354], Loss: 0.9551, Acc: 73.12%
Epoch [117/150], Step [100/354], Loss: 0.8039, Acc: 72.38%
Epoch [117/150], Step [100/354], Loss: 0.8039, Acc: 72.38%
Epoch [117/150], Step [150/354], Loss: 0.6737, Acc: 73.10%
Epoch [117/150], Step [150/354], Loss: 0.6737, Acc: 73.10%
Epoch [117/150], Step [200/354], Loss: 1.0477, Acc: 72.73%
Epoch [117/150], Step [200/354], Loss: 1.0477, Acc: 72.73%
Epoch [117/150], Step [250/354], Loss: 0.6143, Acc: 73.08%
Epoch [117/150], Step [250/354], Loss: 0.6143, Acc: 73.08%
Epoch [117/150], Step [300/354], Loss: 0.4136, Acc: 73.22%
Epoch [117/150], Step [300/354], Loss: 0.4136, Acc: 73.22%
Epoch [117/150], Step [350/354], Loss: 0.6846, Acc: 73.28%
Epoch [117/150], Step [350/354], Loss: 0.6846, Acc: 73.28%

================================================================================
Época [117/150] Completada
================================================================================
Train Loss: 0.8350 | Train Acc: 73.28%
Test Loss:  1.4159 | Test Acc:  66.33%
Gap (Overfitting): 6.96%
Mejor Test Acc hasta ahora: 66.57% (época 114)
Épocas sin mejora: 3/15
Learning Rate actual: 3.13e-06
Tiempo de época: 224.14s
================================================================================


================================================================================
Época [117/150] Completada
================================================================================
Train Loss: 0.8350 | Train Acc: 73.28%
Test Loss:  1.4159 | Test Acc:  66.33%
Gap (Overfitting): 6.96%
Mejor Test Acc hasta ahora: 66.57% (época 114)
Épocas sin mejora: 3/15
Learning Rate actual: 3.13e-06
Tiempo de época: 224.14s
================================================================================

Epoch [118/150], Step [50/354], Loss: 0.9181, Acc: 72.00%
Epoch [118/150], Step [50/354], Loss: 0.9181, Acc: 72.00%
Epoch [118/150], Step [100/354], Loss: 0.7712, Acc: 73.44%
Epoch [118/150], Step [100/354], Loss: 0.7712, Acc: 73.44%
Epoch [118/150], Step [150/354], Loss: 0.6768, Acc: 73.10%
Epoch [118/150], Step [150/354], Loss: 0.6768, Acc: 73.10%
Epoch [118/150], Step [200/354], Loss: 0.6818, Acc: 72.86%
Epoch [118/150], Step [200/354], Loss: 0.6818, Acc: 72.86%
Epoch [118/150], Step [250/354], Loss: 1.0626, Acc: 73.06%
Epoch [118/150], Step [250/354], Loss: 1.0626, Acc: 73.06%
Epoch [118/150], Step [300/354], Loss: 0.7101, Acc: 72.88%
Epoch [118/150], Step [300/354], Loss: 0.7101, Acc: 72.88%
Epoch [118/150], Step [350/354], Loss: 0.5879, Acc: 72.79%
Epoch [118/150], Step [350/354], Loss: 0.5879, Acc: 72.79%

================================================================================
Época [118/150] Completada
================================================================================
Train Loss: 0.8583 | Train Acc: 72.75%
Test Loss:  1.4106 | Test Acc:  66.54%
Gap (Overfitting): 6.22%
Mejor Test Acc hasta ahora: 66.57% (época 114)
Épocas sin mejora: 4/15
Learning Rate actual: 3.13e-06
Tiempo de época: 236.11s
================================================================================


================================================================================
Época [118/150] Completada
================================================================================
Train Loss: 0.8583 | Train Acc: 72.75%
Test Loss:  1.4106 | Test Acc:  66.54%
Gap (Overfitting): 6.22%
Mejor Test Acc hasta ahora: 66.57% (época 114)
Épocas sin mejora: 4/15
Learning Rate actual: 3.13e-06
Tiempo de época: 236.11s
================================================================================

Epoch [119/150], Step [50/354], Loss: 0.7722, Acc: 72.81%
Epoch [119/150], Step [50/354], Loss: 0.7722, Acc: 72.81%
Epoch [119/150], Step [100/354], Loss: 0.8677, Acc: 73.06%
Epoch [119/150], Step [100/354], Loss: 0.8677, Acc: 73.06%
Epoch [119/150], Step [150/354], Loss: 1.1389, Acc: 72.85%
Epoch [119/150], Step [150/354], Loss: 1.1389, Acc: 72.85%
Epoch [119/150], Step [200/354], Loss: 0.9862, Acc: 72.81%
Epoch [119/150], Step [200/354], Loss: 0.9862, Acc: 72.81%
Epoch [119/150], Step [250/354], Loss: 0.8123, Acc: 73.16%
Epoch [119/150], Step [250/354], Loss: 0.8123, Acc: 73.16%
Epoch [119/150], Step [300/354], Loss: 1.2301, Acc: 73.16%
Epoch [119/150], Step [300/354], Loss: 1.2301, Acc: 73.16%
Epoch [119/150], Step [350/354], Loss: 0.5837, Acc: 73.29%
Epoch [119/150], Step [350/354], Loss: 0.5837, Acc: 73.29%

================================================================================
Época [119/150] Completada
================================================================================
Train Loss: 0.8376 | Train Acc: 73.24%
Test Loss:  1.4248 | Test Acc:  66.33%
Gap (Overfitting): 6.91%
Mejor Test Acc hasta ahora: 66.57% (época 114)
Épocas sin mejora: 5/15
Learning Rate actual: 3.13e-06
Tiempo de época: 237.62s
================================================================================


================================================================================
Época [119/150] Completada
================================================================================
Train Loss: 0.8376 | Train Acc: 73.24%
Test Loss:  1.4248 | Test Acc:  66.33%
Gap (Overfitting): 6.91%
Mejor Test Acc hasta ahora: 66.57% (época 114)
Épocas sin mejora: 5/15
Learning Rate actual: 3.13e-06
Tiempo de época: 237.62s
================================================================================

Epoch [120/150], Step [50/354], Loss: 0.6600, Acc: 75.06%
Epoch [120/150], Step [50/354], Loss: 0.6600, Acc: 75.06%
Epoch [120/150], Step [100/354], Loss: 0.8170, Acc: 74.53%
Epoch [120/150], Step [100/354], Loss: 0.8170, Acc: 74.53%
Epoch [120/150], Step [150/354], Loss: 0.7436, Acc: 73.88%
Epoch [120/150], Step [150/354], Loss: 0.7436, Acc: 73.88%
Epoch [120/150], Step [200/354], Loss: 0.9281, Acc: 73.67%
Epoch [120/150], Step [200/354], Loss: 0.9281, Acc: 73.67%
Epoch [120/150], Step [250/354], Loss: 1.0234, Acc: 73.45%
Epoch [120/150], Step [250/354], Loss: 1.0234, Acc: 73.45%
Epoch [120/150], Step [300/354], Loss: 0.8063, Acc: 73.24%
Epoch [120/150], Step [300/354], Loss: 0.8063, Acc: 73.24%
Epoch [120/150], Step [350/354], Loss: 1.3346, Acc: 73.21%
Epoch [120/150], Step [350/354], Loss: 1.3346, Acc: 73.21%

================================================================================
Época [120/150] Completada
================================================================================
Train Loss: 0.8344 | Train Acc: 73.25%
Test Loss:  1.4325 | Test Acc:  66.18%
Gap (Overfitting): 7.06%
Mejor Test Acc hasta ahora: 66.57% (época 114)
Épocas sin mejora: 6/15
Learning Rate actual: 3.13e-06
Tiempo de época: 239.45s
================================================================================


================================================================================
Época [120/150] Completada
================================================================================
Train Loss: 0.8344 | Train Acc: 73.25%
Test Loss:  1.4325 | Test Acc:  66.18%
Gap (Overfitting): 7.06%
Mejor Test Acc hasta ahora: 66.57% (época 114)
Épocas sin mejora: 6/15
Learning Rate actual: 3.13e-06
Tiempo de época: 239.45s
================================================================================

Epoch [121/150], Step [50/354], Loss: 0.6236, Acc: 72.44%
Epoch [121/150], Step [50/354], Loss: 0.6236, Acc: 72.44%
Epoch [121/150], Step [100/354], Loss: 0.7285, Acc: 73.91%
Epoch [121/150], Step [100/354], Loss: 0.7285, Acc: 73.91%
Epoch [121/150], Step [150/354], Loss: 0.7178, Acc: 73.77%
Epoch [121/150], Step [150/354], Loss: 0.7178, Acc: 73.77%
Epoch [121/150], Step [200/354], Loss: 0.6955, Acc: 74.23%
Epoch [121/150], Step [200/354], Loss: 0.6955, Acc: 74.23%
Epoch [121/150], Step [250/354], Loss: 0.8517, Acc: 73.97%
Epoch [121/150], Step [250/354], Loss: 0.8517, Acc: 73.97%
Epoch [121/150], Step [300/354], Loss: 1.0717, Acc: 73.95%
Epoch [121/150], Step [300/354], Loss: 1.0717, Acc: 73.95%
Epoch [121/150], Step [350/354], Loss: 0.8823, Acc: 73.78%
Epoch [121/150], Step [350/354], Loss: 0.8823, Acc: 73.78%

================================================================================
Época [121/150] Completada
================================================================================
Train Loss: 0.8360 | Train Acc: 73.76%
Test Loss:  1.4217 | Test Acc:  66.43%
Gap (Overfitting): 7.33%
Mejor Test Acc hasta ahora: 66.57% (época 114)
Épocas sin mejora: 7/15
Learning Rate actual: 3.13e-06
Tiempo de época: 237.03s
================================================================================


================================================================================
Época [121/150] Completada
================================================================================
Train Loss: 0.8360 | Train Acc: 73.76%
Test Loss:  1.4217 | Test Acc:  66.43%
Gap (Overfitting): 7.33%
Mejor Test Acc hasta ahora: 66.57% (época 114)
Épocas sin mejora: 7/15
Learning Rate actual: 3.13e-06
Tiempo de época: 237.03s
================================================================================

Epoch [122/150], Step [50/354], Loss: 0.6315, Acc: 74.19%
Epoch [122/150], Step [50/354], Loss: 0.6315, Acc: 74.19%
Epoch [122/150], Step [100/354], Loss: 0.5385, Acc: 75.25%
Epoch [122/150], Step [100/354], Loss: 0.5385, Acc: 75.25%
Epoch [122/150], Step [150/354], Loss: 1.3282, Acc: 74.08%
Epoch [122/150], Step [150/354], Loss: 1.3282, Acc: 74.08%
Epoch [122/150], Step [200/354], Loss: 0.8475, Acc: 74.19%
Epoch [122/150], Step [200/354], Loss: 0.8475, Acc: 74.19%
Epoch [122/150], Step [250/354], Loss: 1.1261, Acc: 73.64%
Epoch [122/150], Step [250/354], Loss: 1.1261, Acc: 73.64%
Epoch [122/150], Step [300/354], Loss: 0.7317, Acc: 73.72%
Epoch [122/150], Step [300/354], Loss: 0.7317, Acc: 73.72%
Epoch [122/150], Step [350/354], Loss: 1.1018, Acc: 73.96%
Epoch [122/150], Step [350/354], Loss: 1.1018, Acc: 73.96%
✓ Nuevo mejor modelo guardado: Test Acc = 66.82% (época 122)

================================================================================
Época [122/150] Completada
================================================================================
Train Loss: 0.8313 | Train Acc: 73.96%
Test Loss:  1.4264 | Test Acc:  66.82%
Gap (Overfitting): 7.14%
Mejor Test Acc hasta ahora: 66.82% (época 122)
Épocas sin mejora: 0/15
Learning Rate actual: 3.13e-06
Tiempo de época: 238.61s
================================================================================

✓ Nuevo mejor modelo guardado: Test Acc = 66.82% (época 122)

================================================================================
Época [122/150] Completada
================================================================================
Train Loss: 0.8313 | Train Acc: 73.96%
Test Loss:  1.4264 | Test Acc:  66.82%
Gap (Overfitting): 7.14%
Mejor Test Acc hasta ahora: 66.82% (época 122)
Épocas sin mejora: 0/15
Learning Rate actual: 3.13e-06
Tiempo de época: 238.61s
================================================================================

Epoch [123/150], Step [50/354], Loss: 1.2620, Acc: 72.62%
Epoch [123/150], Step [50/354], Loss: 1.2620, Acc: 72.62%
Epoch [123/150], Step [100/354], Loss: 0.9466, Acc: 73.91%
Epoch [123/150], Step [100/354], Loss: 0.9466, Acc: 73.91%
Epoch [123/150], Step [150/354], Loss: 0.6632, Acc: 73.27%
Epoch [123/150], Step [150/354], Loss: 0.6632, Acc: 73.27%
Epoch [123/150], Step [200/354], Loss: 0.7784, Acc: 72.95%
Epoch [123/150], Step [200/354], Loss: 0.7784, Acc: 72.95%
Epoch [123/150], Step [250/354], Loss: 0.7710, Acc: 72.86%
Epoch [123/150], Step [250/354], Loss: 0.7710, Acc: 72.86%
Epoch [123/150], Step [300/354], Loss: 0.5574, Acc: 73.12%
Epoch [123/150], Step [300/354], Loss: 0.5574, Acc: 73.12%
Epoch [123/150], Step [350/354], Loss: 0.8672, Acc: 73.38%
Epoch [123/150], Step [350/354], Loss: 0.8672, Acc: 73.38%

================================================================================
Época [123/150] Completada
================================================================================
Train Loss: 0.8395 | Train Acc: 73.39%
Test Loss:  1.4429 | Test Acc:  66.18%
Gap (Overfitting): 7.21%
Mejor Test Acc hasta ahora: 66.82% (época 122)
Épocas sin mejora: 1/15
Learning Rate actual: 3.13e-06
Tiempo de época: 218.75s
================================================================================


================================================================================
Época [123/150] Completada
================================================================================
Train Loss: 0.8395 | Train Acc: 73.39%
Test Loss:  1.4429 | Test Acc:  66.18%
Gap (Overfitting): 7.21%
Mejor Test Acc hasta ahora: 66.82% (época 122)
Épocas sin mejora: 1/15
Learning Rate actual: 3.13e-06
Tiempo de época: 218.75s
================================================================================

Epoch [124/150], Step [50/354], Loss: 0.8164, Acc: 73.75%
Epoch [124/150], Step [50/354], Loss: 0.8164, Acc: 73.75%
Epoch [124/150], Step [100/354], Loss: 1.0693, Acc: 73.06%
Epoch [124/150], Step [100/354], Loss: 1.0693, Acc: 73.06%
Epoch [124/150], Step [150/354], Loss: 1.0321, Acc: 73.46%
Epoch [124/150], Step [150/354], Loss: 1.0321, Acc: 73.46%
Epoch [124/150], Step [200/354], Loss: 0.8234, Acc: 73.77%
Epoch [124/150], Step [200/354], Loss: 0.8234, Acc: 73.77%
Epoch [124/150], Step [250/354], Loss: 0.5950, Acc: 73.56%
Epoch [124/150], Step [250/354], Loss: 0.5950, Acc: 73.56%
Epoch [124/150], Step [300/354], Loss: 0.6986, Acc: 73.53%
Epoch [124/150], Step [300/354], Loss: 0.6986, Acc: 73.53%
Epoch [124/150], Step [350/354], Loss: 0.9503, Acc: 73.58%
Epoch [124/150], Step [350/354], Loss: 0.9503, Acc: 73.58%

================================================================================
Época [124/150] Completada
================================================================================
Train Loss: 0.8298 | Train Acc: 73.57%
Test Loss:  1.4448 | Test Acc:  66.54%
Gap (Overfitting): 7.03%
Mejor Test Acc hasta ahora: 66.82% (época 122)
Épocas sin mejora: 2/15
Learning Rate actual: 1.56e-06
Tiempo de época: 215.07s
================================================================================


================================================================================
Época [124/150] Completada
================================================================================
Train Loss: 0.8298 | Train Acc: 73.57%
Test Loss:  1.4448 | Test Acc:  66.54%
Gap (Overfitting): 7.03%
Mejor Test Acc hasta ahora: 66.82% (época 122)
Épocas sin mejora: 2/15
Learning Rate actual: 1.56e-06
Tiempo de época: 215.07s
================================================================================

Epoch [125/150], Step [50/354], Loss: 0.3574, Acc: 74.94%
Epoch [125/150], Step [50/354], Loss: 0.3574, Acc: 74.94%
Epoch [125/150], Step [100/354], Loss: 1.0275, Acc: 74.28%
Epoch [125/150], Step [100/354], Loss: 1.0275, Acc: 74.28%
Epoch [125/150], Step [150/354], Loss: 1.4074, Acc: 73.83%
Epoch [125/150], Step [150/354], Loss: 1.4074, Acc: 73.83%
Epoch [125/150], Step [200/354], Loss: 1.1220, Acc: 73.48%
Epoch [125/150], Step [200/354], Loss: 1.1220, Acc: 73.48%
Epoch [125/150], Step [250/354], Loss: 0.6595, Acc: 73.39%
Epoch [125/150], Step [250/354], Loss: 0.6595, Acc: 73.39%
Epoch [125/150], Step [300/354], Loss: 0.7492, Acc: 73.27%
Epoch [125/150], Step [300/354], Loss: 0.7492, Acc: 73.27%
Epoch [125/150], Step [350/354], Loss: 0.7550, Acc: 73.43%
Epoch [125/150], Step [350/354], Loss: 0.7550, Acc: 73.43%

================================================================================
Época [125/150] Completada
================================================================================
Train Loss: 0.8418 | Train Acc: 73.42%
Test Loss:  1.4368 | Test Acc:  66.33%
Gap (Overfitting): 7.09%
Mejor Test Acc hasta ahora: 66.82% (época 122)
Épocas sin mejora: 3/15
Learning Rate actual: 1.56e-06
Tiempo de época: 211.05s
================================================================================


================================================================================
Época [125/150] Completada
================================================================================
Train Loss: 0.8418 | Train Acc: 73.42%
Test Loss:  1.4368 | Test Acc:  66.33%
Gap (Overfitting): 7.09%
Mejor Test Acc hasta ahora: 66.82% (época 122)
Épocas sin mejora: 3/15
Learning Rate actual: 1.56e-06
Tiempo de época: 211.05s
================================================================================

Epoch [126/150], Step [50/354], Loss: 0.8562, Acc: 74.50%
Epoch [126/150], Step [50/354], Loss: 0.8562, Acc: 74.50%
Epoch [126/150], Step [100/354], Loss: 0.6939, Acc: 74.16%
Epoch [126/150], Step [100/354], Loss: 0.6939, Acc: 74.16%
Epoch [126/150], Step [150/354], Loss: 0.7673, Acc: 74.27%
Epoch [126/150], Step [150/354], Loss: 0.7673, Acc: 74.27%
Epoch [126/150], Step [200/354], Loss: 0.5671, Acc: 74.08%
Epoch [126/150], Step [200/354], Loss: 0.5671, Acc: 74.08%
Epoch [126/150], Step [250/354], Loss: 0.7863, Acc: 73.94%
Epoch [126/150], Step [250/354], Loss: 0.7863, Acc: 73.94%
Epoch [126/150], Step [300/354], Loss: 0.9610, Acc: 73.91%
Epoch [126/150], Step [300/354], Loss: 0.9610, Acc: 73.91%
Epoch [126/150], Step [350/354], Loss: 0.7955, Acc: 73.76%
Epoch [126/150], Step [350/354], Loss: 0.7955, Acc: 73.76%

================================================================================
Época [126/150] Completada
================================================================================
Train Loss: 0.8211 | Train Acc: 73.81%
Test Loss:  1.4362 | Test Acc:  66.61%
Gap (Overfitting): 7.20%
Mejor Test Acc hasta ahora: 66.82% (época 122)
Épocas sin mejora: 4/15
Learning Rate actual: 1.56e-06
Tiempo de época: 215.96s
================================================================================


================================================================================
Época [126/150] Completada
================================================================================
Train Loss: 0.8211 | Train Acc: 73.81%
Test Loss:  1.4362 | Test Acc:  66.61%
Gap (Overfitting): 7.20%
Mejor Test Acc hasta ahora: 66.82% (época 122)
Épocas sin mejora: 4/15
Learning Rate actual: 1.56e-06
Tiempo de época: 215.96s
================================================================================

Epoch [127/150], Step [50/354], Loss: 0.7945, Acc: 73.06%
Epoch [127/150], Step [50/354], Loss: 0.7945, Acc: 73.06%
Epoch [127/150], Step [100/354], Loss: 0.4339, Acc: 73.84%
Epoch [127/150], Step [100/354], Loss: 0.4339, Acc: 73.84%
Epoch [127/150], Step [150/354], Loss: 1.6669, Acc: 73.50%
Epoch [127/150], Step [150/354], Loss: 1.6669, Acc: 73.50%
Epoch [127/150], Step [200/354], Loss: 0.8145, Acc: 73.72%
Epoch [127/150], Step [200/354], Loss: 0.8145, Acc: 73.72%
Epoch [127/150], Step [250/354], Loss: 1.0199, Acc: 73.88%
Epoch [127/150], Step [250/354], Loss: 1.0199, Acc: 73.88%
Epoch [127/150], Step [300/354], Loss: 0.6486, Acc: 73.62%
Epoch [127/150], Step [300/354], Loss: 0.6486, Acc: 73.62%
Epoch [127/150], Step [350/354], Loss: 0.5363, Acc: 73.54%
Epoch [127/150], Step [350/354], Loss: 0.5363, Acc: 73.54%

================================================================================
Época [127/150] Completada
================================================================================
Train Loss: 0.8244 | Train Acc: 73.55%
Test Loss:  1.4413 | Test Acc:  66.50%
Gap (Overfitting): 7.05%
Mejor Test Acc hasta ahora: 66.82% (época 122)
Épocas sin mejora: 5/15
Learning Rate actual: 1.56e-06
Tiempo de época: 214.59s
================================================================================


================================================================================
Época [127/150] Completada
================================================================================
Train Loss: 0.8244 | Train Acc: 73.55%
Test Loss:  1.4413 | Test Acc:  66.50%
Gap (Overfitting): 7.05%
Mejor Test Acc hasta ahora: 66.82% (época 122)
Épocas sin mejora: 5/15
Learning Rate actual: 1.56e-06
Tiempo de época: 214.59s
================================================================================

Epoch [128/150], Step [50/354], Loss: 1.1190, Acc: 74.25%
Epoch [128/150], Step [50/354], Loss: 1.1190, Acc: 74.25%
Epoch [128/150], Step [100/354], Loss: 0.6155, Acc: 74.59%
Epoch [128/150], Step [100/354], Loss: 0.6155, Acc: 74.59%
Epoch [128/150], Step [150/354], Loss: 1.4927, Acc: 74.15%
Epoch [128/150], Step [150/354], Loss: 1.4927, Acc: 74.15%
Epoch [128/150], Step [200/354], Loss: 1.0634, Acc: 73.70%
Epoch [128/150], Step [200/354], Loss: 1.0634, Acc: 73.70%
Epoch [128/150], Step [250/354], Loss: 0.5921, Acc: 73.79%
Epoch [128/150], Step [250/354], Loss: 0.5921, Acc: 73.79%
Epoch [128/150], Step [300/354], Loss: 0.8670, Acc: 73.61%
Epoch [128/150], Step [300/354], Loss: 0.8670, Acc: 73.61%
Epoch [128/150], Step [350/354], Loss: 0.7756, Acc: 73.63%
Epoch [128/150], Step [350/354], Loss: 0.7756, Acc: 73.63%

================================================================================
Época [128/150] Completada
================================================================================
Train Loss: 0.8343 | Train Acc: 73.63%
Test Loss:  1.4397 | Test Acc:  66.18%
Gap (Overfitting): 7.44%
Mejor Test Acc hasta ahora: 66.82% (época 122)
Épocas sin mejora: 6/15
Learning Rate actual: 1.56e-06
Tiempo de época: 215.24s
================================================================================


================================================================================
Época [128/150] Completada
================================================================================
Train Loss: 0.8343 | Train Acc: 73.63%
Test Loss:  1.4397 | Test Acc:  66.18%
Gap (Overfitting): 7.44%
Mejor Test Acc hasta ahora: 66.82% (época 122)
Épocas sin mejora: 6/15
Learning Rate actual: 1.56e-06
Tiempo de época: 215.24s
================================================================================

Epoch [129/150], Step [50/354], Loss: 1.0472, Acc: 73.81%
Epoch [129/150], Step [50/354], Loss: 1.0472, Acc: 73.81%
Epoch [129/150], Step [100/354], Loss: 1.0406, Acc: 74.03%
Epoch [129/150], Step [100/354], Loss: 1.0406, Acc: 74.03%
Epoch [129/150], Step [150/354], Loss: 1.0685, Acc: 73.67%
Epoch [129/150], Step [150/354], Loss: 1.0685, Acc: 73.67%
Epoch [129/150], Step [200/354], Loss: 0.8877, Acc: 73.58%
Epoch [129/150], Step [200/354], Loss: 0.8877, Acc: 73.58%
Epoch [129/150], Step [250/354], Loss: 0.8331, Acc: 73.69%
Epoch [129/150], Step [250/354], Loss: 0.8331, Acc: 73.69%
Epoch [129/150], Step [300/354], Loss: 0.8543, Acc: 73.74%
Epoch [129/150], Step [300/354], Loss: 0.8543, Acc: 73.74%
Epoch [129/150], Step [350/354], Loss: 0.9144, Acc: 73.74%
Epoch [129/150], Step [350/354], Loss: 0.9144, Acc: 73.74%

================================================================================
Época [129/150] Completada
================================================================================
Train Loss: 0.8317 | Train Acc: 73.68%
Test Loss:  1.4341 | Test Acc:  66.29%
Gap (Overfitting): 7.39%
Mejor Test Acc hasta ahora: 66.82% (época 122)
Épocas sin mejora: 7/15
Learning Rate actual: 1.56e-06
Tiempo de época: 215.08s
================================================================================


================================================================================
Época [129/150] Completada
================================================================================
Train Loss: 0.8317 | Train Acc: 73.68%
Test Loss:  1.4341 | Test Acc:  66.29%
Gap (Overfitting): 7.39%
Mejor Test Acc hasta ahora: 66.82% (época 122)
Épocas sin mejora: 7/15
Learning Rate actual: 1.56e-06
Tiempo de época: 215.08s
================================================================================

Epoch [130/150], Step [50/354], Loss: 1.0710, Acc: 74.06%
Epoch [130/150], Step [50/354], Loss: 1.0710, Acc: 74.06%
Epoch [130/150], Step [100/354], Loss: 0.9260, Acc: 73.62%
Epoch [130/150], Step [100/354], Loss: 0.9260, Acc: 73.62%
Epoch [130/150], Step [150/354], Loss: 0.7332, Acc: 73.58%
Epoch [130/150], Step [150/354], Loss: 0.7332, Acc: 73.58%
Epoch [130/150], Step [200/354], Loss: 0.8125, Acc: 73.39%
Epoch [130/150], Step [200/354], Loss: 0.8125, Acc: 73.39%
Epoch [130/150], Step [250/354], Loss: 0.9899, Acc: 73.50%
Epoch [130/150], Step [250/354], Loss: 0.9899, Acc: 73.50%
Epoch [130/150], Step [300/354], Loss: 0.7113, Acc: 73.22%
Epoch [130/150], Step [300/354], Loss: 0.7113, Acc: 73.22%
Epoch [130/150], Step [350/354], Loss: 0.7212, Acc: 73.19%
Epoch [130/150], Step [350/354], Loss: 0.7212, Acc: 73.19%

================================================================================
Época [130/150] Completada
================================================================================
Train Loss: 0.8351 | Train Acc: 73.17%
Test Loss:  1.4333 | Test Acc:  66.36%
Gap (Overfitting): 6.81%
Mejor Test Acc hasta ahora: 66.82% (época 122)
Épocas sin mejora: 8/15
Learning Rate actual: 1.56e-06
Tiempo de época: 215.17s
================================================================================


================================================================================
Época [130/150] Completada
================================================================================
Train Loss: 0.8351 | Train Acc: 73.17%
Test Loss:  1.4333 | Test Acc:  66.36%
Gap (Overfitting): 6.81%
Mejor Test Acc hasta ahora: 66.82% (época 122)
Épocas sin mejora: 8/15
Learning Rate actual: 1.56e-06
Tiempo de época: 215.17s
================================================================================

Epoch [131/150], Step [50/354], Loss: 0.9492, Acc: 74.62%
Epoch [131/150], Step [50/354], Loss: 0.9492, Acc: 74.62%
Epoch [131/150], Step [100/354], Loss: 0.6314, Acc: 74.19%
Epoch [131/150], Step [100/354], Loss: 0.6314, Acc: 74.19%
Epoch [131/150], Step [150/354], Loss: 0.6644, Acc: 74.04%
Epoch [131/150], Step [150/354], Loss: 0.6644, Acc: 74.04%
Epoch [131/150], Step [200/354], Loss: 0.6953, Acc: 73.97%
Epoch [131/150], Step [200/354], Loss: 0.6953, Acc: 73.97%
Epoch [131/150], Step [250/354], Loss: 0.6392, Acc: 73.89%
Epoch [131/150], Step [250/354], Loss: 0.6392, Acc: 73.89%
Epoch [131/150], Step [300/354], Loss: 0.9323, Acc: 73.69%
Epoch [131/150], Step [300/354], Loss: 0.9323, Acc: 73.69%
Epoch [131/150], Step [350/354], Loss: 1.0060, Acc: 73.56%
Epoch [131/150], Step [350/354], Loss: 1.0060, Acc: 73.56%

================================================================================
Época [131/150] Completada
================================================================================
Train Loss: 0.8331 | Train Acc: 73.62%
Test Loss:  1.4365 | Test Acc:  66.43%
Gap (Overfitting): 7.19%
Mejor Test Acc hasta ahora: 66.82% (época 122)
Épocas sin mejora: 9/15
Learning Rate actual: 1.56e-06
Tiempo de época: 214.88s
================================================================================


================================================================================
Época [131/150] Completada
================================================================================
Train Loss: 0.8331 | Train Acc: 73.62%
Test Loss:  1.4365 | Test Acc:  66.43%
Gap (Overfitting): 7.19%
Mejor Test Acc hasta ahora: 66.82% (época 122)
Épocas sin mejora: 9/15
Learning Rate actual: 1.56e-06
Tiempo de época: 214.88s
================================================================================

Epoch [132/150], Step [50/354], Loss: 0.9317, Acc: 72.31%
Epoch [132/150], Step [50/354], Loss: 0.9317, Acc: 72.31%
Epoch [132/150], Step [100/354], Loss: 1.2948, Acc: 72.62%
Epoch [132/150], Step [100/354], Loss: 1.2948, Acc: 72.62%
Epoch [132/150], Step [150/354], Loss: 0.5162, Acc: 73.29%
Epoch [132/150], Step [150/354], Loss: 0.5162, Acc: 73.29%
Epoch [132/150], Step [200/354], Loss: 0.7571, Acc: 73.38%
Epoch [132/150], Step [200/354], Loss: 0.7571, Acc: 73.38%
Epoch [132/150], Step [250/354], Loss: 0.8486, Acc: 73.50%
Epoch [132/150], Step [250/354], Loss: 0.8486, Acc: 73.50%
Epoch [132/150], Step [300/354], Loss: 0.5367, Acc: 73.59%
Epoch [132/150], Step [300/354], Loss: 0.5367, Acc: 73.59%
Epoch [132/150], Step [350/354], Loss: 0.8972, Acc: 73.88%
Epoch [132/150], Step [350/354], Loss: 0.8972, Acc: 73.88%

================================================================================
Época [132/150] Completada
================================================================================
Train Loss: 0.8263 | Train Acc: 73.85%
Test Loss:  1.4366 | Test Acc:  66.43%
Gap (Overfitting): 7.42%
Mejor Test Acc hasta ahora: 66.82% (época 122)
Épocas sin mejora: 10/15
Learning Rate actual: 1.56e-06
Tiempo de época: 215.90s
================================================================================


================================================================================
Época [132/150] Completada
================================================================================
Train Loss: 0.8263 | Train Acc: 73.85%
Test Loss:  1.4366 | Test Acc:  66.43%
Gap (Overfitting): 7.42%
Mejor Test Acc hasta ahora: 66.82% (época 122)
Épocas sin mejora: 10/15
Learning Rate actual: 1.56e-06
Tiempo de época: 215.90s
================================================================================

Epoch [133/150], Step [50/354], Loss: 0.5658, Acc: 75.00%
Epoch [133/150], Step [50/354], Loss: 0.5658, Acc: 75.00%
Epoch [133/150], Step [100/354], Loss: 0.5592, Acc: 73.28%
Epoch [133/150], Step [100/354], Loss: 0.5592, Acc: 73.28%
Epoch [133/150], Step [150/354], Loss: 0.6078, Acc: 73.65%
Epoch [133/150], Step [150/354], Loss: 0.6078, Acc: 73.65%
Epoch [133/150], Step [200/354], Loss: 0.9955, Acc: 73.50%
Epoch [133/150], Step [200/354], Loss: 0.9955, Acc: 73.50%
Epoch [133/150], Step [250/354], Loss: 0.7872, Acc: 73.36%
Epoch [133/150], Step [250/354], Loss: 0.7872, Acc: 73.36%
Epoch [133/150], Step [300/354], Loss: 0.7019, Acc: 73.44%
Epoch [133/150], Step [300/354], Loss: 0.7019, Acc: 73.44%
Epoch [133/150], Step [350/354], Loss: 0.7155, Acc: 73.62%
Epoch [133/150], Step [350/354], Loss: 0.7155, Acc: 73.62%

================================================================================
Época [133/150] Completada
================================================================================
Train Loss: 0.8220 | Train Acc: 73.62%
Test Loss:  1.4432 | Test Acc:  66.71%
Gap (Overfitting): 6.91%
Mejor Test Acc hasta ahora: 66.82% (época 122)
Épocas sin mejora: 11/15
Learning Rate actual: 7.81e-07
Tiempo de época: 215.58s
================================================================================


================================================================================
Época [133/150] Completada
================================================================================
Train Loss: 0.8220 | Train Acc: 73.62%
Test Loss:  1.4432 | Test Acc:  66.71%
Gap (Overfitting): 6.91%
Mejor Test Acc hasta ahora: 66.82% (época 122)
Épocas sin mejora: 11/15
Learning Rate actual: 7.81e-07
Tiempo de época: 215.58s
================================================================================

Epoch [134/150], Step [50/354], Loss: 0.5976, Acc: 75.75%
Epoch [134/150], Step [50/354], Loss: 0.5976, Acc: 75.75%
Epoch [134/150], Step [100/354], Loss: 1.0670, Acc: 73.69%
Epoch [134/150], Step [100/354], Loss: 1.0670, Acc: 73.69%
Epoch [134/150], Step [150/354], Loss: 0.6006, Acc: 73.88%
Epoch [134/150], Step [150/354], Loss: 0.6006, Acc: 73.88%
Epoch [134/150], Step [200/354], Loss: 0.5927, Acc: 74.12%
Epoch [134/150], Step [200/354], Loss: 0.5927, Acc: 74.12%
Epoch [134/150], Step [250/354], Loss: 0.8931, Acc: 74.25%
Epoch [134/150], Step [250/354], Loss: 0.8931, Acc: 74.25%
Epoch [134/150], Step [300/354], Loss: 0.5951, Acc: 73.97%
Epoch [134/150], Step [300/354], Loss: 0.5951, Acc: 73.97%
Epoch [134/150], Step [350/354], Loss: 0.9656, Acc: 73.92%
Epoch [134/150], Step [350/354], Loss: 0.9656, Acc: 73.92%

================================================================================
Época [134/150] Completada
================================================================================
Train Loss: 0.8184 | Train Acc: 73.91%
Test Loss:  1.4488 | Test Acc:  66.47%
Gap (Overfitting): 7.44%
Mejor Test Acc hasta ahora: 66.82% (época 122)
Épocas sin mejora: 12/15
Learning Rate actual: 7.81e-07
Tiempo de época: 215.44s
================================================================================


================================================================================
Época [134/150] Completada
================================================================================
Train Loss: 0.8184 | Train Acc: 73.91%
Test Loss:  1.4488 | Test Acc:  66.47%
Gap (Overfitting): 7.44%
Mejor Test Acc hasta ahora: 66.82% (época 122)
Épocas sin mejora: 12/15
Learning Rate actual: 7.81e-07
Tiempo de época: 215.44s
================================================================================

Epoch [135/150], Step [50/354], Loss: 1.0108, Acc: 73.75%
Epoch [135/150], Step [50/354], Loss: 1.0108, Acc: 73.75%
Epoch [135/150], Step [100/354], Loss: 0.7159, Acc: 74.06%
Epoch [135/150], Step [100/354], Loss: 0.7159, Acc: 74.06%
Epoch [135/150], Step [150/354], Loss: 0.6233, Acc: 73.48%
Epoch [135/150], Step [150/354], Loss: 0.6233, Acc: 73.48%
Epoch [135/150], Step [200/354], Loss: 0.5315, Acc: 73.58%
Epoch [135/150], Step [200/354], Loss: 0.5315, Acc: 73.58%
Epoch [135/150], Step [250/354], Loss: 0.9367, Acc: 73.42%
Epoch [135/150], Step [250/354], Loss: 0.9367, Acc: 73.42%
Epoch [135/150], Step [300/354], Loss: 0.7177, Acc: 73.72%
Epoch [135/150], Step [300/354], Loss: 0.7177, Acc: 73.72%
Epoch [135/150], Step [350/354], Loss: 0.9619, Acc: 73.70%
Epoch [135/150], Step [350/354], Loss: 0.9619, Acc: 73.70%

================================================================================
Época [135/150] Completada
================================================================================
Train Loss: 0.8303 | Train Acc: 73.65%
Test Loss:  1.4533 | Test Acc:  66.40%
Gap (Overfitting): 7.26%
Mejor Test Acc hasta ahora: 66.82% (época 122)
Épocas sin mejora: 13/15
Learning Rate actual: 7.81e-07
Tiempo de época: 215.59s
================================================================================


================================================================================
Época [135/150] Completada
================================================================================
Train Loss: 0.8303 | Train Acc: 73.65%
Test Loss:  1.4533 | Test Acc:  66.40%
Gap (Overfitting): 7.26%
Mejor Test Acc hasta ahora: 66.82% (época 122)
Épocas sin mejora: 13/15
Learning Rate actual: 7.81e-07
Tiempo de época: 215.59s
================================================================================

Epoch [136/150], Step [50/354], Loss: 0.5653, Acc: 73.56%
Epoch [136/150], Step [50/354], Loss: 0.5653, Acc: 73.56%
Epoch [136/150], Step [100/354], Loss: 1.1982, Acc: 73.44%
Epoch [136/150], Step [100/354], Loss: 1.1982, Acc: 73.44%
Epoch [136/150], Step [150/354], Loss: 0.7715, Acc: 73.60%
Epoch [136/150], Step [150/354], Loss: 0.7715, Acc: 73.60%
Epoch [136/150], Step [200/354], Loss: 0.7233, Acc: 73.55%
Epoch [136/150], Step [200/354], Loss: 0.7233, Acc: 73.55%
Epoch [136/150], Step [250/354], Loss: 0.5636, Acc: 73.95%
Epoch [136/150], Step [250/354], Loss: 0.5636, Acc: 73.95%
Epoch [136/150], Step [300/354], Loss: 1.1129, Acc: 73.76%
Epoch [136/150], Step [300/354], Loss: 1.1129, Acc: 73.76%
Epoch [136/150], Step [350/354], Loss: 0.6589, Acc: 73.94%
Epoch [136/150], Step [350/354], Loss: 0.6589, Acc: 73.94%

================================================================================
Época [136/150] Completada
================================================================================
Train Loss: 0.8226 | Train Acc: 73.91%
Test Loss:  1.4452 | Test Acc:  66.40%
Gap (Overfitting): 7.52%
Mejor Test Acc hasta ahora: 66.82% (época 122)
Épocas sin mejora: 14/15
Learning Rate actual: 7.81e-07
Tiempo de época: 215.20s
================================================================================


================================================================================
Época [136/150] Completada
================================================================================
Train Loss: 0.8226 | Train Acc: 73.91%
Test Loss:  1.4452 | Test Acc:  66.40%
Gap (Overfitting): 7.52%
Mejor Test Acc hasta ahora: 66.82% (época 122)
Épocas sin mejora: 14/15
Learning Rate actual: 7.81e-07
Tiempo de época: 215.20s
================================================================================

Epoch [137/150], Step [50/354], Loss: 0.7205, Acc: 74.50%
Epoch [137/150], Step [50/354], Loss: 0.7205, Acc: 74.50%
Epoch [137/150], Step [100/354], Loss: 0.8325, Acc: 73.50%
Epoch [137/150], Step [100/354], Loss: 0.8325, Acc: 73.50%
Epoch [137/150], Step [150/354], Loss: 0.9357, Acc: 73.21%
Epoch [137/150], Step [150/354], Loss: 0.9357, Acc: 73.21%
Epoch [137/150], Step [200/354], Loss: 0.3732, Acc: 73.34%
Epoch [137/150], Step [200/354], Loss: 0.3732, Acc: 73.34%
Epoch [137/150], Step [250/354], Loss: 0.9580, Acc: 73.47%
Epoch [137/150], Step [250/354], Loss: 0.9580, Acc: 73.47%
Epoch [137/150], Step [300/354], Loss: 1.1061, Acc: 73.46%
Epoch [137/150], Step [300/354], Loss: 1.1061, Acc: 73.46%
Epoch [137/150], Step [350/354], Loss: 0.4923, Acc: 73.55%
Epoch [137/150], Step [350/354], Loss: 0.4923, Acc: 73.55%

================================================================================
Época [137/150] Completada
================================================================================
Train Loss: 0.8362 | Train Acc: 73.50%
Test Loss:  1.4432 | Test Acc:  66.43%
Gap (Overfitting): 7.07%
Mejor Test Acc hasta ahora: 66.82% (época 122)
Épocas sin mejora: 15/15
Learning Rate actual: 7.81e-07
Tiempo de época: 215.00s
================================================================================


!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
                            EARLY STOPPING ACTIVADO                             
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
No se observó mejora en Test Accuracy durante 15 épocas consecutivas.
Deteniendo entrenamiento en época 137.
Mejor modelo: época 122 con Test Acc = 66.82%
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!


********************************************************************************
Cargando mejor modelo (época 122) para evaluación final...
********************************************************************************


################################################################################
                            ENTRENAMIENTO COMPLETADO                            
################################################################################
Tiempo total: 578.96 minutos (34737.67 segundos)
Épocas completadas: 137
Mejor Test Accuracy: 66.82% (época 122)
Precisión final de entrenamiento: 73.50%
Precisión final de prueba: 66.43%
Gap final: 7.07%
################################################################################


================================================================================
Época [137/150] Completada
================================================================================
Train Loss: 0.8362 | Train Acc: 73.50%
Test Loss:  1.4432 | Test Acc:  66.43%
Gap (Overfitting): 7.07%
Mejor Test Acc hasta ahora: 66.82% (época 122)
Épocas sin mejora: 15/15
Learning Rate actual: 7.81e-07
Tiempo de época: 215.00s
================================================================================


!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
                            EARLY STOPPING ACTIVADO                             
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
No se observó mejora en Test Accuracy durante 15 épocas consecutivas.
Deteniendo entrenamiento en época 137.
Mejor modelo: época 122 con Test Acc = 66.82%
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!


********************************************************************************
Cargando mejor modelo (época 122) para evaluación final...
********************************************************************************


################################################################################
                            ENTRENAMIENTO COMPLETADO                            
################################################################################
Tiempo total: 578.96 minutos (34737.67 segundos)
Épocas completadas: 137
Mejor Test Accuracy: 66.82% (época 122)
Precisión final de entrenamiento: 73.50%
Precisión final de prueba: 66.43%
Gap final: 7.07%
################################################################################

a) Gráficas de Error y Precisión a lo Largo de las Iteraciones¶

Visualización del progreso del entrenamiento para identificar:

  • Convergencia del modelo
  • Presencia de sobreajuste (gap entre train y test)
  • Estabilidad del entrenamiento
In [ ]:
fig, (ax1, ax2) = plt.subplots(1, 2, figsize=(16, 6))

epochs_range = range(1, len(train_losses) + 1)

# Gráfica de pérdida
ax1.plot(epochs_range, train_losses, 'b-', label='Pérdida de Entrenamiento', linewidth=2.5, marker='o', markersize=4)
ax1.plot(epochs_range, test_losses, 'r-', label='Pérdida de Prueba', linewidth=2.5, marker='s', markersize=4)
ax1.set_xlabel('Época', fontsize=13, fontweight='bold')
ax1.set_ylabel('Pérdida (Loss)', fontsize=13, fontweight='bold')
ax1.set_title(f'Evolución de la Pérdida - {model_name}', fontsize=15, fontweight='bold')
ax1.legend(fontsize=11, loc='best')
ax1.grid(True, alpha=0.3, linestyle='--')
ax1.set_xlim(1, len(train_losses))

# Gráfica de precisión
ax2.plot(epochs_range, train_accuracies, 'b-', label='Precisión de Entrenamiento', linewidth=2.5, marker='o', markersize=4)
ax2.plot(epochs_range, test_accuracies, 'r-', label='Precisión de Prueba', linewidth=2.5, marker='s', markersize=4)
ax2.set_xlabel('Época', fontsize=13, fontweight='bold')
ax2.set_ylabel('Precisión (%)', fontsize=13, fontweight='bold')
ax2.set_title(f'Evolución de la Precisión - {model_name}', fontsize=15, fontweight='bold')
ax2.legend(fontsize=11, loc='best')
ax2.grid(True, alpha=0.3, linestyle='--')
ax2.set_xlim(1, len(train_accuracies))
ax2.set_ylim(0, 100)

plt.tight_layout()
plt.show()

print(f'\n{"="*80}')
print(f'{"RESUMEN DE MÉTRICAS FINALES":^80}')
print(f'{"="*80}')
print(f'Modelo: {model_name}')
print(f'b) Precisión final de entrenamiento: {train_accuracies[-1]:.2f}%')
print(f'b) Precisión final de prueba: {test_accuracies[-1]:.2f}%')
print(f'   Gap (Train - Test): {train_accuracies[-1] - test_accuracies[-1]:.2f}%')
print(f'\n   Pérdida final de entrenamiento: {train_losses[-1]:.4f}')
print(f'   Pérdida final de prueba: {test_losses[-1]:.4f}')
print(f'\nc) Tiempo total de simulación: {total_time/60:.2f} minutos ({total_time:.2f} segundos)')
print(f'   Tiempo promedio por época: {total_time/len(train_losses):.2f} segundos')
print(f'{"="*80}\n')
No description has been provided for this image
================================================================================
                          RESUMEN DE MÉTRICAS FINALES                           
================================================================================
Modelo: AlexNet
b) Precisión final de entrenamiento: 73.50%
b) Precisión final de prueba: 66.43%
   Gap (Train - Test): 7.07%

   Pérdida final de entrenamiento: 0.8362
   Pérdida final de prueba: 1.4432

c) Tiempo total de simulación: 578.96 minutos (34737.67 segundos)
   Tiempo promedio por época: 253.56 segundos
================================================================================

In [ ]:
# d) y e) Análisis de predicciones: Desempeño excelente vs pobre

print('\n=== Evaluando modelo en conjunto de prueba ===')
model.eval()

# Almacenar todas las predicciones
all_predictions = []
all_labels = []
all_confidences = []
all_images = []

with torch.no_grad():
    for images, labels in test_loader:
        images, labels = images.to(device), labels.to(device)
        outputs = model(images)
        probs = torch.nn.functional.softmax(outputs, dim=1)
        confidences, predictions = torch.max(probs, 1)
        
        all_predictions.extend(predictions.cpu().numpy())
        all_labels.extend(labels.cpu().numpy())
        all_confidences.extend(confidences.cpu().numpy())
        all_images.extend(images.cpu())

all_predictions = np.array(all_predictions)
all_labels = np.array(all_labels)
all_confidences = np.array(all_confidences)

correct_mask = all_predictions == all_labels
incorrect_mask = ~correct_mask

correct_indices = np.where(correct_mask)[0]
incorrect_indices = np.where(incorrect_mask)[0]

# d) Mejores predicciones (alta confianza + correctas)
if len(correct_indices) > 0:
    correct_confidences = all_confidences[correct_indices]
    best_indices = correct_indices[np.argsort(correct_confidences)[-6:]]  # Top 6
    
    print(f'\n{"="*80}')
    print(f'd) DESEMPEÑO EXCELENTE - Predicciones con alta confianza (correctas)')
    print(f'{"="*80}')
    
    fig, axes = plt.subplots(2, 3, figsize=(15, 10))
    axes = axes.flatten()
    
    for idx, img_idx in enumerate(best_indices):
        img = all_images[img_idx].numpy().transpose(1, 2, 0)
        img = img * np.array([0.229, 0.224, 0.225]) + np.array([0.485, 0.456, 0.406])
        img = np.clip(img, 0, 1)
        
        pred_class = dataset.classes[all_predictions[img_idx]]
        true_class = dataset.classes[all_labels[img_idx]]
        confidence = all_confidences[img_idx]
        
        axes[idx].imshow(img)
        axes[idx].set_title(f'Predicción: {pred_class}\n'
                           f'Real: {true_class}\n'
                           f'Confianza: {confidence:.2%}', 
                           fontsize=11, color='green', fontweight='bold')
        axes[idx].axis('off')
        
        print(f'{idx+1}. Clase: {pred_class:15s} | Confianza: {confidence:.4f} ({confidence*100:.2f}%)')
    
    plt.suptitle(f'Ejemplos de Desempeño EXCELENTE - {model_name}', fontsize=16, fontweight='bold', y=1.02)
    plt.tight_layout()
    plt.show()

# e) Peores predicciones (incorrectas con alta confianza en error)
if len(incorrect_indices) > 0:
    incorrect_confidences = all_confidences[incorrect_indices]
    worst_indices = incorrect_indices[np.argsort(incorrect_confidences)[-6:]]  # Errores con más confianza
    
    print(f'\n{"="*80}')
    print(f'e) DESEMPEÑO POBRE - Predicciones incorrectas con alta confianza')
    print(f'{"="*80}')
    
    fig, axes = plt.subplots(2, 3, figsize=(15, 10))
    axes = axes.flatten()
    
    for idx, img_idx in enumerate(worst_indices):
        img = all_images[img_idx].numpy().transpose(1, 2, 0)
        img = img * np.array([0.229, 0.224, 0.225]) + np.array([0.485, 0.456, 0.406])
        img = np.clip(img, 0, 1)
        
        pred_class = dataset.classes[all_predictions[img_idx]]
        true_class = dataset.classes[all_labels[img_idx]]
        confidence = all_confidences[img_idx]
        
        axes[idx].imshow(img)
        axes[idx].set_title(f'Predicción: {pred_class}\n'
                           f'Real: {true_class}\n'
                           f'Confianza: {confidence:.2%}', 
                           fontsize=11, color='red', fontweight='bold')
        axes[idx].axis('off')
        
        print(f'{idx+1}. Pred: {pred_class:15s} | Real: {true_class:15s} | Confianza: {confidence:.4f} ({confidence*100:.2f}%)')
    
    plt.suptitle(f'Ejemplos de Desempeño POBRE - {model_name}', fontsize=16, fontweight='bold', y=1.02)
    plt.tight_layout()
    plt.show()

print(f'\n{"="*80}')
print(f'Total de predicciones correctas: {correct_mask.sum()} / {len(all_labels)} ({100*correct_mask.sum()/len(all_labels):.2f}%)')
print(f'Total de predicciones incorrectas: {incorrect_mask.sum()} / {len(all_labels)} ({100*incorrect_mask.sum()/len(all_labels):.2f}%)')
print(f'{"="*80}\n')
=== Evaluando modelo en conjunto de prueba ===

================================================================================
d) DESEMPEÑO EXCELENTE - Predicciones con alta confianza (correctas)
================================================================================
1. Clase: ice_hockey      | Confianza: 1.0000 (100.00%)
2. Clase: kabaddi         | Confianza: 1.0000 (100.00%)
3. Clase: swimming        | Confianza: 1.0000 (100.00%)
4. Clase: kabaddi         | Confianza: 1.0000 (100.00%)
5. Clase: kabaddi         | Confianza: 1.0000 (100.00%)
6. Clase: baseball        | Confianza: 1.0000 (100.00%)

================================================================================
d) DESEMPEÑO EXCELENTE - Predicciones con alta confianza (correctas)
================================================================================
1. Clase: ice_hockey      | Confianza: 1.0000 (100.00%)
2. Clase: kabaddi         | Confianza: 1.0000 (100.00%)
3. Clase: swimming        | Confianza: 1.0000 (100.00%)
4. Clase: kabaddi         | Confianza: 1.0000 (100.00%)
5. Clase: kabaddi         | Confianza: 1.0000 (100.00%)
6. Clase: baseball        | Confianza: 1.0000 (100.00%)
No description has been provided for this image
================================================================================
e) DESEMPEÑO POBRE - Predicciones incorrectas con alta confianza
================================================================================
1. Pred: formula1        | Real: weight_lifting  | Confianza: 0.9999 (99.99%)
2. Pred: kabaddi         | Real: formula1        | Confianza: 1.0000 (100.00%)
3. Pred: kabaddi         | Real: football        | Confianza: 1.0000 (100.00%)
4. Pred: swimming        | Real: chess           | Confianza: 1.0000 (100.00%)
5. Pred: shooting        | Real: tennis          | Confianza: 1.0000 (100.00%)
6. Pred: shooting        | Real: fencing         | Confianza: 1.0000 (100.00%)
No description has been provided for this image
================================================================================
Total de predicciones correctas: 1891 / 2830 (66.82%)
Total de predicciones incorrectas: 939 / 2830 (33.18%)
================================================================================

In [ ]:
from sklearn.metrics import confusion_matrix, classification_report
import seaborn as sns

# Calcular matriz de confusión
cm = confusion_matrix(all_labels, all_predictions)

# Visualizar matriz de confusión
plt.figure(figsize=(16, 14))
sns.heatmap(cm, annot=True, fmt='d', cmap='Blues', 
            xticklabels=dataset.classes, 
            yticklabels=dataset.classes,
            cbar_kws={'label': 'Número de predicciones'})
plt.xlabel('Predicción', fontsize=13, fontweight='bold')
plt.ylabel('Etiqueta Real', fontsize=13, fontweight='bold')
plt.title(f'Matriz de Confusión - {model_name}', fontsize=15, fontweight='bold')
plt.xticks(rotation=45, ha='right')
plt.yticks(rotation=0)
plt.tight_layout()
plt.show()

# Reporte de clasificación detallado
print(f'\n=== REPORTE DE CLASIFICACIÓN POR CLASE ({model_name}) ===\n')
print(classification_report(all_labels, all_predictions, 
                          target_names=dataset.classes,
                          digits=4))

# Identificar clases con mejor y peor desempeño
from sklearn.metrics import precision_recall_fscore_support

precision, recall, f1, support = precision_recall_fscore_support(all_labels, all_predictions)

print('\n=== TOP 5 CLASES CON MEJOR F1-SCORE ===')
best_classes = np.argsort(f1)[-5:][::-1]
for idx in best_classes:
    print(f'{dataset.classes[idx]:20s} | F1: {f1[idx]:.4f} | Precision: {precision[idx]:.4f} | Recall: {recall[idx]:.4f}')

print('\n=== TOP 5 CLASES CON PEOR F1-SCORE ===')
worst_classes = np.argsort(f1)[:5]
for idx in worst_classes:
    print(f'{dataset.classes[idx]:20s} | F1: {f1[idx]:.4f} | Precision: {precision[idx]:.4f} | Recall: {recall[idx]:.4f}')
No description has been provided for this image
=== REPORTE DE CLASIFICACIÓN POR CLASE (AlexNet) ===

                precision    recall  f1-score   support

     badminton     0.7438    0.6503    0.6939       183
      baseball     0.7518    0.7153    0.7331       144
    basketball     0.4958    0.6146    0.5488        96
        boxing     0.7667    0.6619    0.7104       139
         chess     0.6835    0.5745    0.6243        94
       cricket     0.7829    0.7710    0.7769       131
       fencing     0.6952    0.5935    0.6404       123
      football     0.6905    0.7484    0.7183       155
      formula1     0.6309    0.7015    0.6643       134
    gymnastics     0.5702    0.4610    0.5098       141
        hockey     0.5750    0.6161    0.5948       112
    ice_hockey     0.7365    0.8849    0.8039       139
       kabaddi     0.7528    0.7614    0.7571        88
        motogp     0.7872    0.8409    0.8132       132
      shooting     0.6226    0.6286    0.6256       105
      swimming     0.8276    0.8889    0.8571       135
  table_tennis     0.6349    0.5755    0.6038       139
        tennis     0.6615    0.6099    0.6347       141
    volleyball     0.5525    0.7246    0.6270       138
weight_lifting     0.3646    0.3125    0.3365       112
     wrestling     0.6122    0.5085    0.5556       118
           wwe     0.6490    0.7481    0.6950       131

      accuracy                         0.6682      2830
     macro avg     0.6631    0.6633    0.6602      2830
  weighted avg     0.6688    0.6682    0.6655      2830


=== TOP 5 CLASES CON MEJOR F1-SCORE ===
swimming             | F1: 0.8571 | Precision: 0.8276 | Recall: 0.8889
motogp               | F1: 0.8132 | Precision: 0.7872 | Recall: 0.8409
ice_hockey           | F1: 0.8039 | Precision: 0.7365 | Recall: 0.8849
cricket              | F1: 0.7769 | Precision: 0.7829 | Recall: 0.7710
kabaddi              | F1: 0.7571 | Precision: 0.7528 | Recall: 0.7614

=== TOP 5 CLASES CON PEOR F1-SCORE ===
weight_lifting       | F1: 0.3365 | Precision: 0.3646 | Recall: 0.3125
gymnastics           | F1: 0.5098 | Precision: 0.5702 | Recall: 0.4610
basketball           | F1: 0.5488 | Precision: 0.4958 | Recall: 0.6146
wrestling            | F1: 0.5556 | Precision: 0.6122 | Recall: 0.5085
hockey               | F1: 0.5948 | Precision: 0.5750 | Recall: 0.6161
In [ ]:
model_save_path = f'{MODEL_TYPE}_sports_classifier.pth'
torch.save({
    'epoch': len(train_losses),
    'model_state_dict': model.state_dict(),
    'optimizer_state_dict': optimizer.state_dict(),
    'train_loss': train_losses[-1],
    'test_loss': test_losses[-1],
    'train_accuracy': train_accuracies[-1],
    'test_accuracy': test_accuracies[-1],
    'class_names': dataset.classes,
    'model_type': MODEL_TYPE
}, model_save_path)

print(f'✓ Modelo guardado en: {model_save_path}')

# Resumen final completo
print(f'\n{"#"*100}')
print(f'{"RESUMEN FINAL DEL PROYECTO":^100}')
print(f'{"#"*100}')
print(f'\n{"ARQUITECTURA":^100}')
print(f'{"-"*100}')
print(f'Modelo: {model_name}')
print(f'Parámetros totales: {total_params:,}')
print(f'Parámetros entrenables: {trainable_params:,}')
print(f'Parámetros congelados: {frozen_params:,}')
if MODEL_TYPE.lower() == 'vgg16':
    print(f'Bloques congelados: 1-3 (extracción de características básicas)')
    print(f'Bloques entrenables: 4-5 + clasificador personalizado')
else:
    print(f'Capas congeladas: 1-10 (extracción de características básicas)')
    print(f'Capas entrenables: 11+ + clasificador personalizado')

print(f'\n{"HIPERPARÁMETROS":^100}')
print(f'{"-"*100}')
print(f'Épocas: {len(train_losses)}')
print(f'Batch size: {BATCH_SIZE}')
print(f'Learning rate: {LEARNING_RATE}')
print(f'Optimizador: Adam')
print(f'Función de pérdida: CrossEntropyLoss con class weights')
print(f'Regularización: Dropout(0.3) + Dropout(0.5)')

print(f'\n{"MÉTRICAS FINALES":^100}')
print(f'{"-"*100}')
print(f'Precisión de entrenamiento: {train_accuracies[-1]:.2f}%')
print(f'Precisión de prueba: {test_accuracies[-1]:.2f}%')
print(f'Gap (Overfitting): {train_accuracies[-1] - test_accuracies[-1]:.2f}%')
print(f'Pérdida de entrenamiento: {train_losses[-1]:.4f}')
print(f'Pérdida de prueba: {test_losses[-1]:.4f}')

print(f'\n{"TIEMPO DE ENTRENAMIENTO":^100}')
print(f'{"-"*100}')
print(f'Tiempo total: {total_time/60:.2f} minutos ({total_time:.2f} segundos)')
print(f'Tiempo promedio por época: {total_time/len(train_losses):.2f} segundos')

print(f'\n{"DATASET":^100}')
print(f'{"-"*100}')
print(f'Total de imágenes: {len(dataset)}')
print(f'Número de clases: {len(dataset.classes)}')
print(f'Imágenes de entrenamiento: {len(train_indices)} ({100*len(train_indices)/len(dataset):.1f}%)')
print(f'Imágenes de prueba: {len(test_indices)} ({100*len(test_indices)/len(dataset):.1f}%)')
print(f'Clases: {", ".join(dataset.classes)}')
print(f'\n{"#"*100}\n')
✓ Modelo guardado en: alexnet_sports_classifier.pth

####################################################################################################
                                     RESUMEN FINAL DEL PROYECTO                                     
####################################################################################################

                                            ARQUITECTURA                                            
----------------------------------------------------------------------------------------------------
Modelo: AlexNet
Parámetros totales: 57,093,974
Parámetros entrenables: 57,093,974
Parámetros congelados: 0
Capas congeladas: 1-10 (extracción de características básicas)
Capas entrenables: 11+ + clasificador personalizado

                                          HIPERPARÁMETROS                                           
----------------------------------------------------------------------------------------------------
Épocas: 137
Batch size: 32
Learning rate: 0.0001
Optimizador: Adam
Función de pérdida: CrossEntropyLoss con class weights
Regularización: Dropout(0.3) + Dropout(0.5)

                                          MÉTRICAS FINALES                                          
----------------------------------------------------------------------------------------------------
Precisión de entrenamiento: 73.50%
Precisión de prueba: 66.43%
Gap (Overfitting): 7.07%
Pérdida de entrenamiento: 0.8362
Pérdida de prueba: 1.4432

                                      TIEMPO DE ENTRENAMIENTO                                       
----------------------------------------------------------------------------------------------------
Tiempo total: 578.96 minutos (34737.67 segundos)
Tiempo promedio por época: 253.56 segundos

                                              DATASET                                               
----------------------------------------------------------------------------------------------------
Total de imágenes: 14149
Número de clases: 22
Imágenes de entrenamiento: 11319 (80.0%)
Imágenes de prueba: 2830 (20.0%)
Clases: badminton, baseball, basketball, boxing, chess, cricket, fencing, football, formula1, gymnastics, hockey, ice_hockey, kabaddi, motogp, shooting, swimming, table_tennis, tennis, volleyball, weight_lifting, wrestling, wwe

####################################################################################################

Observo que el problema principalmente es el sobreajuste, ya que la precisión en el conjunto de entrenamiento es significativamente mayor que en el conjunto de prueba. Esto indica que el modelo está aprendiendo demasiado bien los datos de entrenamiento, pero no generaliza bien a datos no vistos.

Es complicado entrenar la red neuoronal con un conjunto de datos relativamente pequeño y diverso como este, lo que puede llevar a que el modelo memorice los datos de entrenamiento en lugar de aprender patrones generales.

In [ ]:
!jupyter nbconvert --to html Tarea3.ipynb